diff --git a/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/abi/FeeDistributorBALClaimer.json b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/abi/FeeDistributorBALClaimer.json new file mode 100644 index 0000000000..271d90724f --- /dev/null +++ b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/abi/FeeDistributorBALClaimer.json @@ -0,0 +1,95 @@ +[ + { + "inputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "feeDistributor", + "type": "address" + }, + { + "internalType": "contract ISingleRecipientGauge", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IAuthorizerAdaptor", + "name": "authorizerAdaptor", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "distributeBAL", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizerAdaptor", + "outputs": [ + { + "internalType": "contract IAuthorizerAdaptor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBALTokenHolder", + "outputs": [ + { + "internalType": "contract IBALTokenHolder", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFeeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGauge", + "outputs": [ + { + "internalType": "contract ISingleRecipientGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/build-info/FeeDistributorBALClaimer.json b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/build-info/FeeDistributorBALClaimer.json new file mode 100644 index 0000000000..70b4c5111b --- /dev/null +++ b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/build-info/FeeDistributorBALClaimer.json @@ -0,0 +1,159863 @@ +{ + "id": "e290f316fe8111970d9206f2dbba9f2f", + "_format": "hh-sol-build-info-1", + "solcVersion": "0.7.1", + "solcLongVersion": "0.7.1+commit.f4a555be", + "input": { + "language": "Solidity", + "sources": { + "contracts/admin/AuthorizerAdaptor.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol\";\n\n/**\n * @title Authorizer Adaptor\n * @notice This contract is intended to act as an adaptor between systems which expect a single admin address\n * and the Balancer Authorizer such that the Authorizer may grant/revoke admin powers to unlimited addresses.\n *\n * The permissions the Authorizer can grant are granular such they may be global or specific to a particular contract\n *\n * @dev When calculating the actionId to call a function on a target contract, it must be calculated as if it were\n * to be called on this adaptor. This can be done by passing the function selector to the `getActionId` function.\n */\ncontract AuthorizerAdaptor is IAuthorizerAdaptor, ReentrancyGuard {\n using Address for address;\n\n bytes32 private immutable _actionIdDisambiguator;\n IVault private immutable _vault;\n\n constructor(IVault vault) {\n // AuthorizerAdaptor is a singleton, so it simply uses its own address to disambiguate action identifiers\n _actionIdDisambiguator = bytes32(uint256(address(this)));\n _vault = vault;\n }\n\n /**\n * @notice Returns the Balancer Vault\n */\n function getVault() public view override returns (IVault) {\n return _vault;\n }\n\n /**\n * @notice Returns the Authorizer\n */\n function getAuthorizer() public view override returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n\n function _canPerform(\n bytes32 actionId,\n address account,\n address where\n ) internal view returns (bool) {\n return getAuthorizer().canPerform(actionId, account, where);\n }\n\n /**\n * @notice Returns the action ID associated with calling a given function through this adaptor\n * @dev As the contracts managed by this adaptor don't have action ID disambiguators, we use the adaptor's globally.\n * This means that contracts with the same function selector will have a matching action ID:\n * if granularity is required then permissions must not be granted globally in the Authorizer.\n *\n * @param selector - The 4 byte selector of the function to be called using `performAction`\n * @return The associated action ID\n */\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @notice Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\n * @param target - Address of the contract to be called\n * @param data - Calldata to be sent to the target contract\n * @return The bytes encoded return value from the performed function call\n */\n function performAction(address target, bytes calldata data)\n external\n payable\n override\n nonReentrant\n returns (bytes memory)\n {\n bytes4 selector;\n\n // We want to check that the caller is authorized to call the function on the target rather than this function.\n // We must then pull the function selector from `data` rather than `msg.sig`. The most effective way to do this\n // is via assembly.\n // Note that if `data` is empty this will return an empty function signature (0x00000000)\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // The function selector encoded in `data` has an offset relative to the start of msg.data of:\n // - 4 bytes due to the function selector for `performAction`\n // - 3 words (3 * 32 = 96 bytes) for `target` and the length and offset of `data`\n // 96 + 4 = 100 bytes\n selector := calldataload(100)\n }\n\n _require(_canPerform(getActionId(selector), msg.sender, target), Errors.SENDER_NOT_ALLOWED);\n\n // We don't check that `target` is a contract so all calls to an EOA will succeed.\n return target.functionCallWithValue(data, msg.value);\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/helpers/IAuthentication.sol\";\nimport \"../vault/IVault.sol\";\n\ninterface IAuthorizerAdaptor is IAuthentication {\n /**\n * @notice Returns the Balancer Vault\n */\n function getVault() external view returns (IVault);\n\n /**\n * @notice Returns the Authorizer\n */\n function getAuthorizer() external view returns (IAuthorizer);\n\n /**\n * @notice Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\n * @param target - Address of the contract to be called\n * @param data - Calldata to be sent to the target contract\n * @return The bytes encoded return value from the performed function call\n */\n function performAction(address target, bytes calldata data) external payable returns (bytes memory);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\ninterface IAuthorizer {\n /**\n * @dev Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n */\n function canPerform(\n bytes32 actionId,\n address account,\n address where\n ) external view returns (bool);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\nimport \"../solidity-utils/helpers/IAuthentication.sol\";\nimport \"../solidity-utils/helpers/ISignaturesValidator.sol\";\nimport \"../solidity-utils/helpers/ITemporarilyPausable.sol\";\nimport \"../solidity-utils/misc/IWETH.sol\";\n\nimport \"./IAsset.sol\";\nimport \"./IAuthorizer.sol\";\nimport \"./IFlashLoanRecipient.sol\";\nimport \"./IProtocolFeesCollector.sol\";\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Full external interface for the Vault core contract - no external or public methods exist in the contract that\n * don't override one of these declarations.\n */\ninterface IVault is ISignaturesValidator, ITemporarilyPausable, IAuthentication {\n // Generalities about the Vault:\n //\n // - Whenever documentation refers to 'tokens', it strictly refers to ERC20-compliant token contracts. Tokens are\n // transferred out of the Vault by calling the `IERC20.transfer` function, and transferred in by calling\n // `IERC20.transferFrom`. In these cases, the sender must have previously allowed the Vault to use their tokens by\n // calling `IERC20.approve`. The only deviation from the ERC20 standard that is supported is functions not returning\n // a boolean value: in these scenarios, a non-reverting call is assumed to be successful.\n //\n // - All non-view functions in the Vault are non-reentrant: calling them while another one is mid-execution (e.g.\n // while execution control is transferred to a token contract during a swap) will result in a revert. View\n // functions can be called in a re-reentrant way, but doing so might cause them to return inconsistent results.\n // Contracts calling view functions in the Vault must make sure the Vault has not already been entered.\n //\n // - View functions revert if referring to either unregistered Pools, or unregistered tokens for registered Pools.\n\n // Authorizer\n //\n // Some system actions are permissioned, like setting and collecting protocol fees. This permissioning system exists\n // outside of the Vault in the Authorizer contract: the Vault simply calls the Authorizer to check if the caller\n // can perform a given action.\n\n /**\n * @dev Returns the Vault's Authorizer.\n */\n function getAuthorizer() external view returns (IAuthorizer);\n\n /**\n * @dev Sets a new Authorizer for the Vault. The caller must be allowed by the current Authorizer to do this.\n *\n * Emits an `AuthorizerChanged` event.\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n\n /**\n * @dev Emitted when a new authorizer is set by `setAuthorizer`.\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n // Relayers\n //\n // Additionally, it is possible for an account to perform certain actions on behalf of another one, using their\n // Vault ERC20 allowance and Internal Balance. These accounts are said to be 'relayers' for these Vault functions,\n // and are expected to be smart contracts with sound authentication mechanisms. For an account to be able to wield\n // this power, two things must occur:\n // - The Authorizer must grant the account the permission to be a relayer for the relevant Vault function. This\n // means that Balancer governance must approve each individual contract to act as a relayer for the intended\n // functions.\n // - Each user must approve the relayer to act on their behalf.\n // This double protection means users cannot be tricked into approving malicious relayers (because they will not\n // have been allowed by the Authorizer via governance), nor can malicious relayers approved by a compromised\n // Authorizer or governance drain user funds, since they would also need to be approved by each individual user.\n\n /**\n * @dev Returns true if `user` has approved `relayer` to act as a relayer for them.\n */\n function hasApprovedRelayer(address user, address relayer) external view returns (bool);\n\n /**\n * @dev Allows `relayer` to act as a relayer for `sender` if `approved` is true, and disallows it otherwise.\n *\n * Emits a `RelayerApprovalChanged` event.\n */\n function setRelayerApproval(\n address sender,\n address relayer,\n bool approved\n ) external;\n\n /**\n * @dev Emitted every time a relayer is approved or disapproved by `setRelayerApproval`.\n */\n event RelayerApprovalChanged(address indexed relayer, address indexed sender, bool approved);\n\n // Internal Balance\n //\n // Users can deposit tokens into the Vault, where they are allocated to their Internal Balance, and later\n // transferred or withdrawn. It can also be used as a source of tokens when joining Pools, as a destination\n // when exiting them, and as either when performing swaps. This usage of Internal Balance results in greatly reduced\n // gas costs when compared to relying on plain ERC20 transfers, leading to large savings for frequent users.\n //\n // Internal Balance management features batching, which means a single contract call can be used to perform multiple\n // operations of different kinds, with different senders and recipients, at once.\n\n /**\n * @dev Returns `user`'s Internal Balance for a set of tokens.\n */\n function getInternalBalance(address user, IERC20[] memory tokens) external view returns (uint256[] memory);\n\n /**\n * @dev Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer)\n * and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as\n * it lets integrators reuse a user's Vault allowance.\n *\n * For each operation, if the caller is not `sender`, it must be an authorized relayer for them.\n */\n function manageUserBalance(UserBalanceOp[] memory ops) external payable;\n\n /**\n * @dev Data for `manageUserBalance` operations, which include the possibility for ETH to be sent and received\n without manual WETH wrapping or unwrapping.\n */\n struct UserBalanceOp {\n UserBalanceOpKind kind;\n IAsset asset;\n uint256 amount;\n address sender;\n address payable recipient;\n }\n\n // There are four possible operations in `manageUserBalance`:\n //\n // - DEPOSIT_INTERNAL\n // Increases the Internal Balance of the `recipient` account by transferring tokens from the corresponding\n // `sender`. The sender must have allowed the Vault to use their tokens via `IERC20.approve()`.\n //\n // ETH can be used by passing the ETH sentinel value as the asset and forwarding ETH in the call: it will be wrapped\n // and deposited as WETH. Any ETH amount remaining will be sent back to the caller (not the sender, which is\n // relevant for relayers).\n //\n // Emits an `InternalBalanceChanged` event.\n //\n //\n // - WITHDRAW_INTERNAL\n // Decreases the Internal Balance of the `sender` account by transferring tokens to the `recipient`.\n //\n // ETH can be used by passing the ETH sentinel value as the asset. This will deduct WETH instead, unwrap it and send\n // it to the recipient as ETH.\n //\n // Emits an `InternalBalanceChanged` event.\n //\n //\n // - TRANSFER_INTERNAL\n // Transfers tokens from the Internal Balance of the `sender` account to the Internal Balance of `recipient`.\n //\n // Reverts if the ETH sentinel value is passed.\n //\n // Emits an `InternalBalanceChanged` event.\n //\n //\n // - TRANSFER_EXTERNAL\n // Transfers tokens from `sender` to `recipient`, using the Vault's ERC20 allowance. This is typically used by\n // relayers, as it lets them reuse a user's Vault allowance.\n //\n // Reverts if the ETH sentinel value is passed.\n //\n // Emits an `ExternalBalanceTransfer` event.\n\n enum UserBalanceOpKind { DEPOSIT_INTERNAL, WITHDRAW_INTERNAL, TRANSFER_INTERNAL, TRANSFER_EXTERNAL }\n\n /**\n * @dev Emitted when a user's Internal Balance changes, either from calls to `manageUserBalance`, or through\n * interacting with Pools using Internal Balance.\n *\n * Because Internal Balance works exclusively with ERC20 tokens, ETH deposits and withdrawals will use the WETH\n * address.\n */\n event InternalBalanceChanged(address indexed user, IERC20 indexed token, int256 delta);\n\n /**\n * @dev Emitted when a user's Vault ERC20 allowance is used by the Vault to transfer tokens to an external account.\n */\n event ExternalBalanceTransfer(IERC20 indexed token, address indexed sender, address recipient, uint256 amount);\n\n // Pools\n //\n // There are three specialization settings for Pools, which allow for cheaper swaps at the cost of reduced\n // functionality:\n //\n // - General: no specialization, suited for all Pools. IGeneralPool is used for swap request callbacks, passing the\n // balance of all tokens in the Pool. These Pools have the largest swap costs (because of the extra storage reads),\n // which increase with the number of registered tokens.\n //\n // - Minimal Swap Info: IMinimalSwapInfoPool is used instead of IGeneralPool, which saves gas by only passing the\n // balance of the two tokens involved in the swap. This is suitable for some pricing algorithms, like the weighted\n // constant product one popularized by Balancer V1. Swap costs are smaller compared to general Pools, and are\n // independent of the number of registered tokens.\n //\n // - Two Token: only allows two tokens to be registered. This achieves the lowest possible swap gas cost. Like\n // minimal swap info Pools, these are called via IMinimalSwapInfoPool.\n\n enum PoolSpecialization { GENERAL, MINIMAL_SWAP_INFO, TWO_TOKEN }\n\n /**\n * @dev Registers the caller account as a Pool with a given specialization setting. Returns the Pool's ID, which\n * is used in all Pool-related functions. Pools cannot be deregistered, nor can the Pool's specialization be\n * changed.\n *\n * The caller is expected to be a smart contract that implements either `IGeneralPool` or `IMinimalSwapInfoPool`,\n * depending on the chosen specialization setting. This contract is known as the Pool's contract.\n *\n * Note that the same contract may register itself as multiple Pools with unique Pool IDs, or in other words,\n * multiple Pools may share the same contract.\n *\n * Emits a `PoolRegistered` event.\n */\n function registerPool(PoolSpecialization specialization) external returns (bytes32);\n\n /**\n * @dev Emitted when a Pool is registered by calling `registerPool`.\n */\n event PoolRegistered(bytes32 indexed poolId, address indexed poolAddress, PoolSpecialization specialization);\n\n /**\n * @dev Returns a Pool's contract address and specialization setting.\n */\n function getPool(bytes32 poolId) external view returns (address, PoolSpecialization);\n\n /**\n * @dev Registers `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n *\n * Pools can only interact with tokens they have registered. Users join a Pool by transferring registered tokens,\n * exit by receiving registered tokens, and can only swap registered tokens.\n *\n * Each token can only be registered once. For Pools with the Two Token specialization, `tokens` must have a length\n * of two, that is, both tokens must be registered in the same `registerTokens` call, and they must be sorted in\n * ascending order.\n *\n * The `tokens` and `assetManagers` arrays must have the same length, and each entry in these indicates the Asset\n * Manager for the corresponding token. Asset Managers can manage a Pool's tokens via `managePoolBalance`,\n * depositing and withdrawing them directly, and can even set their balance to arbitrary amounts. They are therefore\n * expected to be highly secured smart contracts with sound design principles, and the decision to register an\n * Asset Manager should not be made lightly.\n *\n * Pools can choose not to assign an Asset Manager to a given token by passing in the zero address. Once an Asset\n * Manager is set, it cannot be changed except by deregistering the associated token and registering again with a\n * different Asset Manager.\n *\n * Emits a `TokensRegistered` event.\n */\n function registerTokens(\n bytes32 poolId,\n IERC20[] memory tokens,\n address[] memory assetManagers\n ) external;\n\n /**\n * @dev Emitted when a Pool registers tokens by calling `registerTokens`.\n */\n event TokensRegistered(bytes32 indexed poolId, IERC20[] tokens, address[] assetManagers);\n\n /**\n * @dev Deregisters `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n *\n * Only registered tokens (via `registerTokens`) can be deregistered. Additionally, they must have zero total\n * balance. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens\n * must be deregistered in the same `deregisterTokens` call.\n *\n * A deregistered token can be re-registered later on, possibly with a different Asset Manager.\n *\n * Emits a `TokensDeregistered` event.\n */\n function deregisterTokens(bytes32 poolId, IERC20[] memory tokens) external;\n\n /**\n * @dev Emitted when a Pool deregisters tokens by calling `deregisterTokens`.\n */\n event TokensDeregistered(bytes32 indexed poolId, IERC20[] tokens);\n\n /**\n * @dev Returns detailed information for a Pool's registered token.\n *\n * `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens\n * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token`\n * equals the sum of `cash` and `managed`.\n *\n * Internally, `cash` and `managed` are stored using 112 bits. No action can ever cause a Pool's token `cash`,\n * `managed` or `total` balance to be greater than 2^112 - 1.\n *\n * `lastChangeBlock` is the number of the block in which `token`'s total balance was last modified (via either a\n * join, exit, swap, or Asset Manager update). This value is useful to avoid so-called 'sandwich attacks', for\n * example when developing price oracles. A change of zero (e.g. caused by a swap with amount zero) is considered a\n * change for this purpose, and will update `lastChangeBlock`.\n *\n * `assetManager` is the Pool's token Asset Manager.\n */\n function getPoolTokenInfo(bytes32 poolId, IERC20 token)\n external\n view\n returns (\n uint256 cash,\n uint256 managed,\n uint256 lastChangeBlock,\n address assetManager\n );\n\n /**\n * @dev Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of\n * the tokens' `balances` changed.\n *\n * The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all\n * Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order.\n *\n * If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same\n * order as passed to `registerTokens`.\n *\n * Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are\n * the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo`\n * instead.\n */\n function getPoolTokens(bytes32 poolId)\n external\n view\n returns (\n IERC20[] memory tokens,\n uint256[] memory balances,\n uint256 lastChangeBlock\n );\n\n /**\n * @dev Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will\n * trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized\n * Pool shares.\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount\n * to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces\n * these maximums.\n *\n * If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable\n * this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the\n * WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent\n * back to the caller (not the sender, which is important for relayers).\n *\n * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n * interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be\n * sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final\n * `assets` array might not be sorted. Pools with no registered tokens cannot be joined.\n *\n * If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only\n * be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be\n * withdrawn from Internal Balance: attempting to do so will trigger a revert.\n *\n * This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement\n * their own custom logic. This typically requires additional information from the user (such as the expected number\n * of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed\n * directly to the Pool's contract, as is `recipient`.\n *\n * Emits a `PoolBalanceChanged` event.\n */\n function joinPool(\n bytes32 poolId,\n address sender,\n address recipient,\n JoinPoolRequest memory request\n ) external payable;\n\n struct JoinPoolRequest {\n IAsset[] assets;\n uint256[] maxAmountsIn;\n bytes userData;\n bool fromInternalBalance;\n }\n\n /**\n * @dev Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will\n * trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized\n * Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see\n * `getPoolTokenInfo`).\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum\n * token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault:\n * it just enforces these minimums.\n *\n * If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To\n * enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead\n * of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit.\n *\n * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n * interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must\n * be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the\n * final `assets` array might not be sorted. Pools with no registered tokens cannot be exited.\n *\n * If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise,\n * an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to\n * do so will trigger a revert.\n *\n * `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the\n * `tokens` array. This array must match the Pool's registered tokens.\n *\n * This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement\n * their own custom logic. This typically requires additional information from the user (such as the expected number\n * of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and\n * passed directly to the Pool's contract.\n *\n * Emits a `PoolBalanceChanged` event.\n */\n function exitPool(\n bytes32 poolId,\n address sender,\n address payable recipient,\n ExitPoolRequest memory request\n ) external;\n\n struct ExitPoolRequest {\n IAsset[] assets;\n uint256[] minAmountsOut;\n bytes userData;\n bool toInternalBalance;\n }\n\n /**\n * @dev Emitted when a user joins or exits a Pool by calling `joinPool` or `exitPool`, respectively.\n */\n event PoolBalanceChanged(\n bytes32 indexed poolId,\n address indexed liquidityProvider,\n IERC20[] tokens,\n int256[] deltas,\n uint256[] protocolFeeAmounts\n );\n\n enum PoolBalanceChangeKind { JOIN, EXIT }\n\n // Swaps\n //\n // Users can swap tokens with Pools by calling the `swap` and `batchSwap` functions. To do this,\n // they need not trust Pool contracts in any way: all security checks are made by the Vault. They must however be\n // aware of the Pools' pricing algorithms in order to estimate the prices Pools will quote.\n //\n // The `swap` function executes a single swap, while `batchSwap` can perform multiple swaps in sequence.\n // In each individual swap, tokens of one kind are sent from the sender to the Pool (this is the 'token in'),\n // and tokens of another kind are sent from the Pool to the recipient in exchange (this is the 'token out').\n // More complex swaps, such as one token in to multiple tokens out can be achieved by batching together\n // individual swaps.\n //\n // There are two swap kinds:\n // - 'given in' swaps, where the amount of tokens in (sent to the Pool) is known, and the Pool determines (via the\n // `onSwap` hook) the amount of tokens out (to send to the recipient).\n // - 'given out' swaps, where the amount of tokens out (received from the Pool) is known, and the Pool determines\n // (via the `onSwap` hook) the amount of tokens in (to receive from the sender).\n //\n // Additionally, it is possible to chain swaps using a placeholder input amount, which the Vault replaces with\n // the calculated output of the previous swap. If the previous swap was 'given in', this will be the calculated\n // tokenOut amount. If the previous swap was 'given out', it will use the calculated tokenIn amount. These extended\n // swaps are known as 'multihop' swaps, since they 'hop' through a number of intermediate tokens before arriving at\n // the final intended token.\n //\n // In all cases, tokens are only transferred in and out of the Vault (or withdrawn from and deposited into Internal\n // Balance) after all individual swaps have been completed, and the net token balance change computed. This makes\n // certain swap patterns, such as multihops, or swaps that interact with the same token pair in multiple Pools, cost\n // much less gas than they would otherwise.\n //\n // It also means that under certain conditions it is possible to perform arbitrage by swapping with multiple\n // Pools in a way that results in net token movement out of the Vault (profit), with no tokens being sent in (only\n // updating the Pool's internal accounting).\n //\n // To protect users from front-running or the market changing rapidly, they supply a list of 'limits' for each token\n // involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the\n // minimum amount of tokens to receive (by passing a negative value) is specified.\n //\n // Additionally, a 'deadline' timestamp can also be provided, forcing the swap to fail if it occurs after\n // this point in time (e.g. if the transaction failed to be included in a block promptly).\n //\n // If interacting with Pools that hold WETH, it is possible to both send and receive ETH directly: the Vault will do\n // the wrapping and unwrapping. To enable this mechanism, the IAsset sentinel value (the zero address) must be\n // passed in the `assets` array instead of the WETH address. Note that it is possible to combine ETH and WETH in the\n // same swap. Any excess ETH will be sent back to the caller (not the sender, which is relevant for relayers).\n //\n // Finally, Internal Balance can be used when either sending or receiving tokens.\n\n enum SwapKind { GIVEN_IN, GIVEN_OUT }\n\n /**\n * @dev Performs a swap with a single Pool.\n *\n * If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens\n * taken from the Pool, which must be greater than or equal to `limit`.\n *\n * If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens\n * sent to the Pool, which must be less than or equal to `limit`.\n *\n * Internal Balance usage and the recipient are determined by the `funds` struct.\n *\n * Emits a `Swap` event.\n */\n function swap(\n SingleSwap memory singleSwap,\n FundManagement memory funds,\n uint256 limit,\n uint256 deadline\n ) external payable returns (uint256);\n\n /**\n * @dev Data for a single swap executed by `swap`. `amount` is either `amountIn` or `amountOut` depending on\n * the `kind` value.\n *\n * `assetIn` and `assetOut` are either token addresses, or the IAsset sentinel value for ETH (the zero address).\n * Note that Pools never interact with ETH directly: it will be wrapped to or unwrapped from WETH by the Vault.\n *\n * The `userData` field is ignored by the Vault, but forwarded to the Pool in the `onSwap` hook, and may be\n * used to extend swap behavior.\n */\n struct SingleSwap {\n bytes32 poolId;\n SwapKind kind;\n IAsset assetIn;\n IAsset assetOut;\n uint256 amount;\n bytes userData;\n }\n\n /**\n * @dev Performs a series of swaps with one or multiple Pools. In each individual swap, the caller determines either\n * the amount of tokens sent to or received from the Pool, depending on the `kind` value.\n *\n * Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the\n * Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at\n * the same index in the `assets` array.\n *\n * Swaps are executed sequentially, in the order specified by the `swaps` array. Each array element describes a\n * Pool, the token to be sent to this Pool, the token to receive from it, and an amount that is either `amountIn` or\n * `amountOut` depending on the swap kind.\n *\n * Multihop swaps can be executed by passing an `amount` value of zero for a swap. This will cause the amount in/out\n * of the previous swap to be used as the amount in for the current one. In a 'given in' swap, 'tokenIn' must equal\n * the previous swap's `tokenOut`. For a 'given out' swap, `tokenOut` must equal the previous swap's `tokenIn`.\n *\n * The `assets` array contains the addresses of all assets involved in the swaps. These are either token addresses,\n * or the IAsset sentinel value for ETH (the zero address). Each entry in the `swaps` array specifies tokens in and\n * out by referencing an index in `assets`. Note that Pools never interact with ETH directly: it will be wrapped to\n * or unwrapped from WETH by the Vault.\n *\n * Internal Balance usage, sender, and recipient are determined by the `funds` struct. The `limits` array specifies\n * the minimum or maximum amount of each token the vault is allowed to transfer.\n *\n * `batchSwap` can be used to make a single swap, like `swap` does, but doing so requires more gas than the\n * equivalent `swap` call.\n *\n * Emits `Swap` events.\n */\n function batchSwap(\n SwapKind kind,\n BatchSwapStep[] memory swaps,\n IAsset[] memory assets,\n FundManagement memory funds,\n int256[] memory limits,\n uint256 deadline\n ) external payable returns (int256[] memory);\n\n /**\n * @dev Data for each individual swap executed by `batchSwap`. The asset in and out fields are indexes into the\n * `assets` array passed to that function, and ETH assets are converted to WETH.\n *\n * If `amount` is zero, the multihop mechanism is used to determine the actual amount based on the amount in/out\n * from the previous swap, depending on the swap kind.\n *\n * The `userData` field is ignored by the Vault, but forwarded to the Pool in the `onSwap` hook, and may be\n * used to extend swap behavior.\n */\n struct BatchSwapStep {\n bytes32 poolId;\n uint256 assetInIndex;\n uint256 assetOutIndex;\n uint256 amount;\n bytes userData;\n }\n\n /**\n * @dev Emitted for each individual swap performed by `swap` or `batchSwap`.\n */\n event Swap(\n bytes32 indexed poolId,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut\n );\n\n /**\n * @dev All tokens in a swap are either sent from the `sender` account to the Vault, or from the Vault to the\n * `recipient` account.\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * If `fromInternalBalance` is true, the `sender`'s Internal Balance will be preferred, performing an ERC20\n * transfer for the difference between the requested amount and the User's Internal Balance (if any). The `sender`\n * must have allowed the Vault to use their tokens via `IERC20.approve()`. This matches the behavior of\n * `joinPool`.\n *\n * If `toInternalBalance` is true, tokens will be deposited to `recipient`'s internal balance instead of\n * transferred. This matches the behavior of `exitPool`.\n *\n * Note that ETH cannot be deposited to or withdrawn from Internal Balance: attempting to do so will trigger a\n * revert.\n */\n struct FundManagement {\n address sender;\n bool fromInternalBalance;\n address payable recipient;\n bool toInternalBalance;\n }\n\n /**\n * @dev Simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be\n * simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result.\n *\n * Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH)\n * the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it\n * receives are the same that an equivalent `batchSwap` call would receive.\n *\n * Unlike `batchSwap`, this function performs no checks on the sender or recipient field in the `funds` struct.\n * This makes it suitable to be called by off-chain applications via eth_call without needing to hold tokens,\n * approve them for the Vault, or even know a user's address.\n *\n * Note that this function is not 'view' (due to implementation details): the client code must explicitly execute\n * eth_call instead of eth_sendTransaction.\n */\n function queryBatchSwap(\n SwapKind kind,\n BatchSwapStep[] memory swaps,\n IAsset[] memory assets,\n FundManagement memory funds\n ) external returns (int256[] memory assetDeltas);\n\n // Flash Loans\n\n /**\n * @dev Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it,\n * and then reverting unless the tokens plus a proportional protocol fee have been returned.\n *\n * The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount\n * for each token contract. `tokens` must be sorted in ascending order.\n *\n * The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the\n * `receiveFlashLoan` call.\n *\n * Emits `FlashLoan` events.\n */\n function flashLoan(\n IFlashLoanRecipient recipient,\n IERC20[] memory tokens,\n uint256[] memory amounts,\n bytes memory userData\n ) external;\n\n /**\n * @dev Emitted for each individual flash loan performed by `flashLoan`.\n */\n event FlashLoan(IFlashLoanRecipient indexed recipient, IERC20 indexed token, uint256 amount, uint256 feeAmount);\n\n // Asset Management\n //\n // Each token registered for a Pool can be assigned an Asset Manager, which is able to freely withdraw the Pool's\n // tokens from the Vault, deposit them, or assign arbitrary values to its `managed` balance (see\n // `getPoolTokenInfo`). This makes them extremely powerful and dangerous. Even if an Asset Manager only directly\n // controls one of the tokens in a Pool, a malicious manager could set that token's balance to manipulate the\n // prices of the other tokens, and then drain the Pool with swaps. The risk of using Asset Managers is therefore\n // not constrained to the tokens they are managing, but extends to the entire Pool's holdings.\n //\n // However, a properly designed Asset Manager smart contract can be safely used for the Pool's benefit,\n // for example by lending unused tokens out for interest, or using them to participate in voting protocols.\n //\n // This concept is unrelated to the IAsset interface.\n\n /**\n * @dev Performs a set of Pool balance operations, which may be either withdrawals, deposits or updates.\n *\n * Pool Balance management features batching, which means a single contract call can be used to perform multiple\n * operations of different kinds, with different Pools and tokens, at once.\n *\n * For each operation, the caller must be registered as the Asset Manager for `token` in `poolId`.\n */\n function managePoolBalance(PoolBalanceOp[] memory ops) external;\n\n struct PoolBalanceOp {\n PoolBalanceOpKind kind;\n bytes32 poolId;\n IERC20 token;\n uint256 amount;\n }\n\n /**\n * Withdrawals decrease the Pool's cash, but increase its managed balance, leaving the total balance unchanged.\n *\n * Deposits increase the Pool's cash, but decrease its managed balance, leaving the total balance unchanged.\n *\n * Updates don't affect the Pool's cash balance, but because the managed balance changes, it does alter the total.\n * The external amount can be either increased or decreased by this call (i.e., reporting a gain or a loss).\n */\n enum PoolBalanceOpKind { WITHDRAW, DEPOSIT, UPDATE }\n\n /**\n * @dev Emitted when a Pool's token Asset Manager alters its balance via `managePoolBalance`.\n */\n event PoolBalanceManaged(\n bytes32 indexed poolId,\n address indexed assetManager,\n IERC20 indexed token,\n int256 cashDelta,\n int256 managedDelta\n );\n\n // Protocol Fees\n //\n // Some operations cause the Vault to collect tokens in the form of protocol fees, which can then be withdrawn by\n // permissioned accounts.\n //\n // There are two kinds of protocol fees:\n //\n // - flash loan fees: charged on all flash loans, as a percentage of the amounts lent.\n //\n // - swap fees: a percentage of the fees charged by Pools when performing swaps. For a number of reasons, including\n // swap gas costs and interface simplicity, protocol swap fees are not charged on each individual swap. Rather,\n // Pools are expected to keep track of how much they have charged in swap fees, and pay any outstanding debts to the\n // Vault when they are joined or exited. This prevents users from joining a Pool with unpaid debt, as well as\n // exiting a Pool in debt without first paying their share.\n\n /**\n * @dev Returns the current protocol fee module.\n */\n function getProtocolFeesCollector() external view returns (IProtocolFeesCollector);\n\n /**\n * @dev Safety mechanism to pause most Vault operations in the event of an emergency - typically detection of an\n * error in some part of the system.\n *\n * The Vault can only be paused during an initial time period, after which pausing is forever disabled.\n *\n * While the contract is paused, the following features are disabled:\n * - depositing and transferring internal balance\n * - transferring external balance (using the Vault's allowance)\n * - swaps\n * - joining Pools\n * - Asset Manager interactions\n *\n * Internal Balance can still be withdrawn, and Pools exited.\n */\n function setPaused(bool paused) external;\n\n /**\n * @dev Returns the Vault's WETH instance.\n */\n function WETH() external view returns (IWETH);\n // solhint-disable-previous-line func-name-mixedcase\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// Based on the ReentrancyGuard library from OpenZeppelin Contracts, altered to reduce bytecode size.\n// Modifier code is inlined by the compiler, which causes its code to appear multiple times in the codebase. By using\n// private functions, we achieve the same end result with slightly higher runtime gas costs, but reduced bytecode size.\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.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 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 make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _enterNonReentrant();\n _;\n _exitNonReentrant();\n }\n\n function _enterNonReentrant() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n _require(_status != _ENTERED, Errors.REENTRANCY);\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _exitNonReentrant() 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" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// Based on the Address library from OpenZeppelin Contracts, altered by removing the `isContract` checks on\n// `functionCall` and `functionDelegateCall` in order to save gas, as the recipients are known to be contracts.\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\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 function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n size := extcodesize(account)\n }\n return size > 0;\n }\n\n // solhint-disable max-line-length\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, Errors.ADDRESS_INSUFFICIENT_BALANCE);\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{ value: amount }(\"\");\n _require(success, Errors.ADDRESS_CANNOT_SEND_VALUE);\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 * - 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 // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call(data);\n return verifyCallResult(success, returndata);\n }\n\n // solhint-enable max-line-length\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but passing some native ETH as msg.value to the call.\n *\n * _Available since v3.4._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return verifyCallResult(success, returndata);\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 // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling up the\n * revert reason or using the one provided.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\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 // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n _revert(Errors.LOW_LEVEL_CALL_FAILED);\n }\n }\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\ninterface IAuthentication {\n /**\n * @dev Returns the action identifier associated with the external function described by `selector`.\n */\n function getActionId(bytes4 selector) external view returns (bytes32);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\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 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 `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 returns (bool);\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" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface for the SignatureValidator helper, used to support meta-transactions.\n */\ninterface ISignaturesValidator {\n /**\n * @dev Returns the EIP712 domain separator.\n */\n function getDomainSeparator() external view returns (bytes32);\n\n /**\n * @dev Returns the next nonce used by an address to sign messages.\n */\n function getNextNonce(address user) external view returns (uint256);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface for the TemporarilyPausable helper.\n */\ninterface ITemporarilyPausable {\n /**\n * @dev Emitted every time the pause state changes by `_setPaused`.\n */\n event PausedStateChanged(bool paused);\n\n /**\n * @dev Returns the current paused state.\n */\n function getPausedState()\n external\n view\n returns (\n bool paused,\n uint256 pauseWindowEndTime,\n uint256 bufferPeriodEndTime\n );\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../openzeppelin/IERC20.sol\";\n\n/**\n * @dev Interface for WETH9.\n * See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol\n */\ninterface IWETH is IERC20 {\n function deposit() external payable;\n\n function withdraw(uint256 amount) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n/**\n * @dev This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero\n * address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like\n * types.\n *\n * This concept is unrelated to a Pool's Asset Managers.\n */\ninterface IAsset {\n // solhint-disable-previous-line no-empty-blocks\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n// Inspired by Aave Protocol's IFlashLoanReceiver.\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\ninterface IFlashLoanRecipient {\n /**\n * @dev When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient.\n *\n * At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this\n * call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the\n * Vault, or else the entire flash loan will revert.\n *\n * `userData` is the same value passed in the `IVault.flashLoan` call.\n */\n function receiveFlashLoan(\n IERC20[] memory tokens,\n uint256[] memory amounts,\n uint256[] memory feeAmounts,\n bytes memory userData\n ) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./IVault.sol\";\nimport \"./IAuthorizer.sol\";\n\ninterface IProtocolFeesCollector {\n event SwapFeePercentageChanged(uint256 newSwapFeePercentage);\n event FlashLoanFeePercentageChanged(uint256 newFlashLoanFeePercentage);\n\n function withdrawCollectedFees(\n IERC20[] calldata tokens,\n uint256[] calldata amounts,\n address recipient\n ) external;\n\n function setSwapFeePercentage(uint256 newSwapFeePercentage) external;\n\n function setFlashLoanFeePercentage(uint256 newFlashLoanFeePercentage) external;\n\n function getSwapFeePercentage() external view returns (uint256);\n\n function getFlashLoanFeePercentage() external view returns (uint256);\n\n function getCollectedFeeAmounts(IERC20[] memory tokens) external view returns (uint256[] memory feeAmounts);\n\n function getAuthorizer() external view returns (IAuthorizer);\n\n function vault() external view returns (IVault);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n// solhint-disable\n\n/**\n * @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n * supported.\n */\nfunction _require(bool condition, uint256 errorCode) pure {\n if (!condition) _revert(errorCode);\n}\n\n/**\n * @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported.\n */\nfunction _revert(uint256 errorCode) pure {\n // We're going to dynamically create a revert string based on the error code, with the following format:\n // 'BAL#{errorCode}'\n // where the code is left-padded with zeroes to three digits (so they range from 000 to 999).\n //\n // We don't have revert strings embedded in the contract to save bytecode size: it takes much less space to store a\n // number (8 to 16 bits) than the individual string characters.\n //\n // The dynamic string creation algorithm that follows could be implemented in Solidity, but assembly allows for a\n // much denser implementation, again saving bytecode size. Given this function unconditionally reverts, this is a\n // safe place to rely on it without worrying about how its usage might affect e.g. memory contents.\n assembly {\n // First, we need to compute the ASCII representation of the error code. We assume that it is in the 0-999\n // range, so we only need to convert three digits. To convert the digits to ASCII, we add 0x30, the value for\n // the '0' character.\n\n let units := add(mod(errorCode, 10), 0x30)\n\n errorCode := div(errorCode, 10)\n let tenths := add(mod(errorCode, 10), 0x30)\n\n errorCode := div(errorCode, 10)\n let hundreds := add(mod(errorCode, 10), 0x30)\n\n // With the individual characters, we can now construct the full string. The \"BAL#\" part is a known constant\n // (0x42414c23): we simply shift this by 24 (to provide space for the 3 bytes of the error code), and add the\n // characters to it, each shifted by a multiple of 8.\n // The revert reason is then shifted left by 200 bits (256 minus the length of the string, 7 characters * 8 bits\n // per character = 56) to locate it in the most significant part of the 256 slot (the beginning of a byte\n // array).\n\n let revertReason := shl(200, add(0x42414c23000000, add(add(units, shl(8, tenths)), shl(16, hundreds))))\n\n // We can now encode the reason in memory, which can be safely overwritten as we're about to revert. The encoded\n // message will have the following layout:\n // [ revert reason identifier ] [ string location offset ] [ string length ] [ string contents ]\n\n // The Solidity revert reason identifier is 0x08c739a0, the function selector of the Error(string) function. We\n // also write zeroes to the next 28 bytes of memory, but those are about to be overwritten.\n mstore(0x0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n // Next is the offset to the location of the string, which will be placed immediately after (20 bytes away).\n mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020)\n // The string length is fixed: 7 characters.\n mstore(0x24, 7)\n // Finally, the string itself is stored.\n mstore(0x44, revertReason)\n\n // Even if the string is only 7 bytes long, we need to return a full 32 byte slot containing it. The length of\n // the encoded message is therefore 4 + 32 + 32 + 32 = 100.\n revert(0, 100)\n }\n}\n\nlibrary Errors {\n // Math\n uint256 internal constant ADD_OVERFLOW = 0;\n uint256 internal constant SUB_OVERFLOW = 1;\n uint256 internal constant SUB_UNDERFLOW = 2;\n uint256 internal constant MUL_OVERFLOW = 3;\n uint256 internal constant ZERO_DIVISION = 4;\n uint256 internal constant DIV_INTERNAL = 5;\n uint256 internal constant X_OUT_OF_BOUNDS = 6;\n uint256 internal constant Y_OUT_OF_BOUNDS = 7;\n uint256 internal constant PRODUCT_OUT_OF_BOUNDS = 8;\n uint256 internal constant INVALID_EXPONENT = 9;\n\n // Input\n uint256 internal constant OUT_OF_BOUNDS = 100;\n uint256 internal constant UNSORTED_ARRAY = 101;\n uint256 internal constant UNSORTED_TOKENS = 102;\n uint256 internal constant INPUT_LENGTH_MISMATCH = 103;\n uint256 internal constant ZERO_TOKEN = 104;\n\n // Shared pools\n uint256 internal constant MIN_TOKENS = 200;\n uint256 internal constant MAX_TOKENS = 201;\n uint256 internal constant MAX_SWAP_FEE_PERCENTAGE = 202;\n uint256 internal constant MIN_SWAP_FEE_PERCENTAGE = 203;\n uint256 internal constant MINIMUM_BPT = 204;\n uint256 internal constant CALLER_NOT_VAULT = 205;\n uint256 internal constant UNINITIALIZED = 206;\n uint256 internal constant BPT_IN_MAX_AMOUNT = 207;\n uint256 internal constant BPT_OUT_MIN_AMOUNT = 208;\n uint256 internal constant EXPIRED_PERMIT = 209;\n uint256 internal constant NOT_TWO_TOKENS = 210;\n uint256 internal constant DISABLED = 211;\n\n // Pools\n uint256 internal constant MIN_AMP = 300;\n uint256 internal constant MAX_AMP = 301;\n uint256 internal constant MIN_WEIGHT = 302;\n uint256 internal constant MAX_STABLE_TOKENS = 303;\n uint256 internal constant MAX_IN_RATIO = 304;\n uint256 internal constant MAX_OUT_RATIO = 305;\n uint256 internal constant MIN_BPT_IN_FOR_TOKEN_OUT = 306;\n uint256 internal constant MAX_OUT_BPT_FOR_TOKEN_IN = 307;\n uint256 internal constant NORMALIZED_WEIGHT_INVARIANT = 308;\n uint256 internal constant INVALID_TOKEN = 309;\n uint256 internal constant UNHANDLED_JOIN_KIND = 310;\n uint256 internal constant ZERO_INVARIANT = 311;\n uint256 internal constant ORACLE_INVALID_SECONDS_QUERY = 312;\n uint256 internal constant ORACLE_NOT_INITIALIZED = 313;\n uint256 internal constant ORACLE_QUERY_TOO_OLD = 314;\n uint256 internal constant ORACLE_INVALID_INDEX = 315;\n uint256 internal constant ORACLE_BAD_SECS = 316;\n uint256 internal constant AMP_END_TIME_TOO_CLOSE = 317;\n uint256 internal constant AMP_ONGOING_UPDATE = 318;\n uint256 internal constant AMP_RATE_TOO_HIGH = 319;\n uint256 internal constant AMP_NO_ONGOING_UPDATE = 320;\n uint256 internal constant STABLE_INVARIANT_DIDNT_CONVERGE = 321;\n uint256 internal constant STABLE_GET_BALANCE_DIDNT_CONVERGE = 322;\n uint256 internal constant RELAYER_NOT_CONTRACT = 323;\n uint256 internal constant BASE_POOL_RELAYER_NOT_CALLED = 324;\n uint256 internal constant REBALANCING_RELAYER_REENTERED = 325;\n uint256 internal constant GRADUAL_UPDATE_TIME_TRAVEL = 326;\n uint256 internal constant SWAPS_DISABLED = 327;\n uint256 internal constant CALLER_IS_NOT_LBP_OWNER = 328;\n uint256 internal constant PRICE_RATE_OVERFLOW = 329;\n uint256 internal constant INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED = 330;\n uint256 internal constant WEIGHT_CHANGE_TOO_FAST = 331;\n uint256 internal constant LOWER_GREATER_THAN_UPPER_TARGET = 332;\n uint256 internal constant UPPER_TARGET_TOO_HIGH = 333;\n uint256 internal constant UNHANDLED_BY_LINEAR_POOL = 334;\n uint256 internal constant OUT_OF_TARGET_RANGE = 335;\n uint256 internal constant UNHANDLED_EXIT_KIND = 336;\n uint256 internal constant UNAUTHORIZED_EXIT = 337;\n uint256 internal constant MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE = 338;\n uint256 internal constant UNHANDLED_BY_MANAGED_POOL = 339;\n uint256 internal constant UNHANDLED_BY_PHANTOM_POOL = 340;\n uint256 internal constant TOKEN_DOES_NOT_HAVE_RATE_PROVIDER = 341;\n uint256 internal constant INVALID_INITIALIZATION = 342;\n uint256 internal constant OUT_OF_NEW_TARGET_RANGE = 343;\n uint256 internal constant UNAUTHORIZED_OPERATION = 344;\n uint256 internal constant UNINITIALIZED_POOL_CONTROLLER = 345;\n uint256 internal constant SET_SWAP_FEE_DURING_FEE_CHANGE = 346;\n uint256 internal constant SET_SWAP_FEE_PENDING_FEE_CHANGE = 347;\n uint256 internal constant CHANGE_TOKENS_DURING_WEIGHT_CHANGE = 348;\n uint256 internal constant CHANGE_TOKENS_PENDING_WEIGHT_CHANGE = 349;\n uint256 internal constant MAX_WEIGHT = 350;\n uint256 internal constant UNAUTHORIZED_JOIN = 351;\n uint256 internal constant MAX_MANAGEMENT_AUM_FEE_PERCENTAGE = 352;\n\n // Lib\n uint256 internal constant REENTRANCY = 400;\n uint256 internal constant SENDER_NOT_ALLOWED = 401;\n uint256 internal constant PAUSED = 402;\n uint256 internal constant PAUSE_WINDOW_EXPIRED = 403;\n uint256 internal constant MAX_PAUSE_WINDOW_DURATION = 404;\n uint256 internal constant MAX_BUFFER_PERIOD_DURATION = 405;\n uint256 internal constant INSUFFICIENT_BALANCE = 406;\n uint256 internal constant INSUFFICIENT_ALLOWANCE = 407;\n uint256 internal constant ERC20_TRANSFER_FROM_ZERO_ADDRESS = 408;\n uint256 internal constant ERC20_TRANSFER_TO_ZERO_ADDRESS = 409;\n uint256 internal constant ERC20_MINT_TO_ZERO_ADDRESS = 410;\n uint256 internal constant ERC20_BURN_FROM_ZERO_ADDRESS = 411;\n uint256 internal constant ERC20_APPROVE_FROM_ZERO_ADDRESS = 412;\n uint256 internal constant ERC20_APPROVE_TO_ZERO_ADDRESS = 413;\n uint256 internal constant ERC20_TRANSFER_EXCEEDS_ALLOWANCE = 414;\n uint256 internal constant ERC20_DECREASED_ALLOWANCE_BELOW_ZERO = 415;\n uint256 internal constant ERC20_TRANSFER_EXCEEDS_BALANCE = 416;\n uint256 internal constant ERC20_BURN_EXCEEDS_ALLOWANCE = 417;\n uint256 internal constant SAFE_ERC20_CALL_FAILED = 418;\n uint256 internal constant ADDRESS_INSUFFICIENT_BALANCE = 419;\n uint256 internal constant ADDRESS_CANNOT_SEND_VALUE = 420;\n uint256 internal constant SAFE_CAST_VALUE_CANT_FIT_INT256 = 421;\n uint256 internal constant GRANT_SENDER_NOT_ADMIN = 422;\n uint256 internal constant REVOKE_SENDER_NOT_ADMIN = 423;\n uint256 internal constant RENOUNCE_SENDER_NOT_ALLOWED = 424;\n uint256 internal constant BUFFER_PERIOD_EXPIRED = 425;\n uint256 internal constant CALLER_IS_NOT_OWNER = 426;\n uint256 internal constant NEW_OWNER_IS_ZERO = 427;\n uint256 internal constant CODE_DEPLOYMENT_FAILED = 428;\n uint256 internal constant CALL_TO_NON_CONTRACT = 429;\n uint256 internal constant LOW_LEVEL_CALL_FAILED = 430;\n uint256 internal constant NOT_PAUSED = 431;\n uint256 internal constant ADDRESS_ALREADY_ALLOWLISTED = 432;\n uint256 internal constant ADDRESS_NOT_ALLOWLISTED = 433;\n uint256 internal constant ERC20_BURN_EXCEEDS_BALANCE = 434;\n uint256 internal constant INVALID_OPERATION = 435;\n\n // Vault\n uint256 internal constant INVALID_POOL_ID = 500;\n uint256 internal constant CALLER_NOT_POOL = 501;\n uint256 internal constant SENDER_NOT_ASSET_MANAGER = 502;\n uint256 internal constant USER_DOESNT_ALLOW_RELAYER = 503;\n uint256 internal constant INVALID_SIGNATURE = 504;\n uint256 internal constant EXIT_BELOW_MIN = 505;\n uint256 internal constant JOIN_ABOVE_MAX = 506;\n uint256 internal constant SWAP_LIMIT = 507;\n uint256 internal constant SWAP_DEADLINE = 508;\n uint256 internal constant CANNOT_SWAP_SAME_TOKEN = 509;\n uint256 internal constant UNKNOWN_AMOUNT_IN_FIRST_SWAP = 510;\n uint256 internal constant MALCONSTRUCTED_MULTIHOP_SWAP = 511;\n uint256 internal constant INTERNAL_BALANCE_OVERFLOW = 512;\n uint256 internal constant INSUFFICIENT_INTERNAL_BALANCE = 513;\n uint256 internal constant INVALID_ETH_INTERNAL_BALANCE = 514;\n uint256 internal constant INVALID_POST_LOAN_BALANCE = 515;\n uint256 internal constant INSUFFICIENT_ETH = 516;\n uint256 internal constant UNALLOCATED_ETH = 517;\n uint256 internal constant ETH_TRANSFER = 518;\n uint256 internal constant CANNOT_USE_ETH_SENTINEL = 519;\n uint256 internal constant TOKENS_MISMATCH = 520;\n uint256 internal constant TOKEN_NOT_REGISTERED = 521;\n uint256 internal constant TOKEN_ALREADY_REGISTERED = 522;\n uint256 internal constant TOKENS_ALREADY_SET = 523;\n uint256 internal constant TOKENS_LENGTH_MUST_BE_2 = 524;\n uint256 internal constant NONZERO_TOKEN_BALANCE = 525;\n uint256 internal constant BALANCE_TOTAL_OVERFLOW = 526;\n uint256 internal constant POOL_NO_TOKENS = 527;\n uint256 internal constant INSUFFICIENT_FLASH_LOAN_BALANCE = 528;\n\n // Fees\n uint256 internal constant SWAP_FEE_PERCENTAGE_TOO_HIGH = 600;\n uint256 internal constant FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH = 601;\n uint256 internal constant INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT = 602;\n uint256 internal constant AUM_FEE_PERCENTAGE_TOO_HIGH = 603;\n}\n" + }, + "contracts/test/TestAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol\";\n\n// This contract maintains the old AccessControl behaviour which is used by BalancerGovernanceToken in production\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```\n * function foo() public {\n * require(hasRole(MY_ROLE, msg.sender));\n * ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it.\n */\nabstract contract TestAccessControl {\n using EnumerableSet for EnumerableSet.AddressSet;\n using Address for address;\n\n struct RoleData {\n EnumerableSet.AddressSet members;\n bytes32 adminRole;\n }\n\n mapping(bytes32 => RoleData) private _roles;\n\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) public view returns (bool) {\n return _roles[role].members.contains(account);\n }\n\n /**\n * @dev Returns the number of accounts that have `role`. Can be used\n * together with {getRoleMember} to enumerate all bearers of a role.\n */\n function getRoleMemberCount(bytes32 role) public view returns (uint256) {\n return _roles[role].members.length();\n }\n\n // solhint-disable max-line-length\n /**\n * @dev Returns one of the accounts that have `role`. `index` must be a\n * value between 0 and {getRoleMemberCount}, non-inclusive.\n *\n * Role bearers are not sorted in any particular way, and their ordering may\n * change at any point.\n *\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\n * you perform all queries on the same block. See the following\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\n * for more information.\n */\n // solhint-enable max-line-length\n function getRoleMember(bytes32 role, uint256 index) public view returns (address) {\n return _roles[role].members.at(index);\n }\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) public view returns (bytes32) {\n return _roles[role].adminRole;\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) public virtual {\n require(hasRole(_roles[role].adminRole, msg.sender), \"AccessControl: sender must be an admin to grant\");\n\n _grantRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) public virtual {\n require(hasRole(_roles[role].adminRole, msg.sender), \"AccessControl: sender must be an admin to revoke\");\n\n _revokeRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) public virtual {\n require(account == msg.sender, \"AccessControl: can only renounce roles for self\");\n\n _revokeRole(role, account);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event. Note that unlike {grantRole}, this function doesn't perform any\n * checks on the calling account.\n *\n * [WARNING]\n * ====\n * This function should only be called from the constructor when setting\n * up the initial roles for the system.\n *\n * Using this function in any other way is effectively circumventing the admin\n * system imposed by {AccessControl}.\n * ====\n */\n function _setupRole(bytes32 role, address account) internal virtual {\n _grantRole(role, account);\n }\n\n /**\n * @dev Sets `adminRole` as ``role``'s admin role.\n *\n * Emits a {RoleAdminChanged} event.\n */\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);\n _roles[role].adminRole = adminRole;\n }\n\n function _grantRole(bytes32 role, address account) private {\n if (_roles[role].members.add(account)) {\n emit RoleGranted(role, account, msg.sender);\n }\n }\n\n function _revokeRole(bytes32 role, address account) private {\n if (_roles[role].members.remove(account)) {\n emit RoleRevoked(role, account, msg.sender);\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n// work on bytes32, replacing them with a native implementation for address and bytes32 values, to reduce bytecode\n// size and runtime costs.\n// The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSet {\n // The original OpenZeppelin implementation uses a generic Set type with bytes32 values: this was replaced with\n // AddressSet, which uses address keys natively, resulting in more dense bytecode.\n\n struct AddressSet {\n // Storage of set values\n address[] _values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(address => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, if it was not already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // The swap is only necessary if we're not removing the last element\n if (toDeleteIndex != lastIndex) {\n address lastValue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastValue;\n // Update the index for the moved value\n set._indexes[lastValue] = toDeleteIndex + 1; // All indexes are 1-based\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n _require(set._values.length > index, Errors.OUT_OF_BOUNDS);\n return unchecked_at(set, index);\n }\n\n /**\n * @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n * than {length}). O(1).\n *\n * This function performs one less storage read than {at}, but should only be used when `index` is known to be\n * within bounds.\n */\n // solhint-disable-next-line func-name-mixedcase\n function unchecked_at(AddressSet storage set, uint256 index) internal view returns (address) {\n return set._values[index];\n }\n\n function rawIndexOf(AddressSet storage set, address value) internal view returns (uint256) {\n return set._indexes[value] - 1;\n }\n\n struct Bytes32Set {\n // Storage of set values\n bytes32[] _values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // The swap is only necessary if we're not removing the last element\n if (toDeleteIndex != lastIndex) {\n bytes32 lastValue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastValue;\n // Update the index for the moved value\n set._indexes[lastValue] = toDeleteIndex + 1; // All indexes are 1-based\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n _require(set._values.length > index, Errors.OUT_OF_BOUNDS);\n return unchecked_at(set, index);\n }\n\n /**\n * @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n * than {length}). O(1).\n *\n * This function performs one less storage read than {at}, but should only be used when `index` is known to be\n * within bounds.\n */\n // solhint-disable-next-line func-name-mixedcase\n function unchecked_at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return set._values[index];\n }\n\n function rawIndexOf(Bytes32Set storage set, bytes32 value) internal view returns (uint256) {\n return set._indexes[value] - 1;\n }\n}\n" + }, + "contracts/test/TestBalancerToken.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\";\n\nimport \"./TestAccessControl.sol\";\n\ncontract TestBalancerToken is TestAccessControl, ERC20, ERC20Burnable, ERC20Permit {\n bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n bytes32 public constant SNAPSHOT_ROLE = keccak256(\"SNAPSHOT_ROLE\");\n\n event Snapshot(uint256 id);\n\n constructor(\n address admin,\n string memory name,\n string memory symbol\n ) ERC20(name, symbol) ERC20Permit(name) {\n _setupDecimals(18);\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\n _setupRole(MINTER_ROLE, admin);\n _setupRole(SNAPSHOT_ROLE, admin);\n }\n\n function mint(address recipient, uint256 amount) external {\n require(hasRole(MINTER_ROLE, msg.sender), \"NOT_MINTER\");\n _mint(recipient, amount);\n }\n\n function snapshot() external {\n require(hasRole(SNAPSHOT_ROLE, msg.sender), \"NOT_SNAPSHOTTER\");\n emit Snapshot(0);\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./SafeMath.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.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 */\ncontract ERC20 is IERC20 {\n using SafeMath for uint256;\n\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 uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view 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 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 {_setupDecimals} is\n * called.\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 returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(msg.sender, recipient, 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 * 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 _transfer(sender, recipient, amount);\n _approve(\n sender,\n msg.sender,\n _allowances[sender][msg.sender].sub(amount, Errors.ERC20_TRANSFER_EXCEEDS_ALLOWANCE)\n );\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].add(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 _approve(\n msg.sender,\n spender,\n _allowances[msg.sender][spender].sub(subtractedValue, Errors.ERC20_DECREASED_ALLOWANCE_BELOW_ZERO)\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), Errors.ERC20_TRANSFER_FROM_ZERO_ADDRESS);\n _require(recipient != address(0), Errors.ERC20_TRANSFER_TO_ZERO_ADDRESS);\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, Errors.ERC20_TRANSFER_EXCEEDS_BALANCE);\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(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 _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(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), Errors.ERC20_BURN_FROM_ZERO_ADDRESS);\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, Errors.ERC20_BURN_EXCEEDS_BALANCE);\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(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 _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal {\n _decimals = decimals_;\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 // solhint-disable-previous-line no-empty-blocks\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"./ERC20.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 ERC20Burnable is ERC20 {\n using SafeMath for uint256;\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(msg.sender, 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 uint256 decreasedAllowance = allowance(account, msg.sender).sub(amount, Errors.ERC20_BURN_EXCEEDS_ALLOWANCE);\n\n _approve(account, msg.sender, decreasedAllowance);\n _burn(account, amount);\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\";\n\nimport \"./ERC20.sol\";\nimport \"./EIP712.sol\";\n\n/**\n * @dev Implementation 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 *\n * _Available since v3.4._\n */\nabstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {\n mapping(address => uint256) private _nonces;\n\n // solhint-disable-next-line var-name-mixedcase\n bytes32 private immutable _PERMIT_TYPEHASH = keccak256(\n \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"\n );\n\n /**\n * @dev Initializes the {EIP712} domain separator using the `name` parameter, 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(string memory name) EIP712(name, \"1\") {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @dev See {IERC20Permit-permit}.\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 // solhint-disable-next-line not-rely-on-time\n _require(block.timestamp <= deadline, Errors.EXPIRED_PERMIT);\n\n uint256 nonce = _nonces[owner];\n bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, nonce, deadline));\n\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signer = ecrecover(hash, v, r, s);\n _require((signer != address(0)) && (signer == owner), Errors.INVALID_SIGNATURE);\n\n _nonces[owner] = nonce + 1;\n _approve(owner, spender, value);\n }\n\n /**\n * @dev See {IERC20Permit-nonces}.\n */\n function nonces(address owner) public view override returns (uint256) {\n return _nonces[owner];\n }\n\n /**\n * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view override returns (bytes32) {\n return _domainSeparatorV4();\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n _require(c >= a, Errors.ADD_OVERFLOW);\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return sub(a, b, Errors.SUB_OVERFLOW);\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n uint256 errorCode\n ) internal pure returns (uint256) {\n _require(b <= a, errorCode);\n uint256 c = a - b;\n\n return c;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.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" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\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 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 _HASHED_NAME = keccak256(bytes(name));\n _HASHED_VERSION = keccak256(bytes(version));\n _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view virtual returns (bytes32) {\n return keccak256(abi.encode(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION, _getChainId(), 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 keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n // Silence state mutability warning without generating bytecode.\n // See https://github.com/ethereum/solidity/issues/10090#issuecomment-741789128 and\n // https://github.com/ethereum/solidity/issues/2691\n this;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n}\n" + }, + "contracts/BalancerMinter.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\";\n\ncontract BalancerMinter is IBalancerMinter, ReentrancyGuard, EIP712 {\n using SafeMath for uint256;\n\n IERC20 private immutable _token;\n IBalancerTokenAdmin private immutable _tokenAdmin;\n IGaugeController private immutable _gaugeController;\n\n // user -> gauge -> value\n mapping(address => mapping(address => uint256)) private _minted;\n // minter -> user -> can mint?\n mapping(address => mapping(address => bool)) private _allowedMinter;\n\n // Signature replay attack prevention for each user.\n mapping(address => uint256) internal _nextNonce;\n\n // solhint-disable-next-line var-name-mixedcase\n bytes32 private immutable _SET_MINTER_APPROVAL_TYPEHASH = keccak256(\n \"SetMinterApproval(address minter,bool approval,uint256 nonce,uint256 deadline)\"\n );\n\n event MinterApprovalSet(address indexed user, address indexed minter, bool approval);\n\n constructor(IBalancerTokenAdmin tokenAdmin, IGaugeController gaugeController) EIP712(\"Balancer Minter\", \"1\") {\n _token = tokenAdmin.getBalancerToken();\n _tokenAdmin = tokenAdmin;\n _gaugeController = gaugeController;\n }\n\n function getDomainSeparator() external view returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n function getNextNonce(address user) external view returns (uint256) {\n return _nextNonce[user];\n }\n\n /**\n * @notice Returns the address of the Balancer Governance Token\n */\n function getBalancerToken() external view override returns (IERC20) {\n return _token;\n }\n\n /**\n * @notice Returns the address of the Balancer Token Admin contract\n */\n function getBalancerTokenAdmin() external view override returns (IBalancerTokenAdmin) {\n return _tokenAdmin;\n }\n\n /**\n * @notice Returns the address of the Gauge Controller\n */\n function getGaugeController() external view override returns (IGaugeController) {\n return _gaugeController;\n }\n\n /**\n * @notice Mint everything which belongs to `msg.sender` and send to them\n * @param gauge `LiquidityGauge` address to get mintable amount from\n */\n function mint(address gauge) external override nonReentrant returns (uint256) {\n return _mintFor(gauge, msg.sender);\n }\n\n /**\n * @notice Mint everything which belongs to `msg.sender` across multiple gauges\n * @param gauges List of `LiquidityGauge` addresses\n */\n function mintMany(address[] calldata gauges) external override nonReentrant returns (uint256) {\n return _mintForMany(gauges, msg.sender);\n }\n\n /**\n * @notice Mint tokens for `user`\n * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n * @param gauge `LiquidityGauge` address to get mintable amount from\n * @param user Address to mint to\n */\n function mintFor(address gauge, address user) external override nonReentrant returns (uint256) {\n require(_allowedMinter[msg.sender][user], \"Caller not allowed to mint for user\");\n return _mintFor(gauge, user);\n }\n\n /**\n * @notice Mint tokens for `user` across multiple gauges\n * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n * @param gauges List of `LiquidityGauge` addresses\n * @param user Address to mint to\n */\n function mintManyFor(address[] calldata gauges, address user) external override nonReentrant returns (uint256) {\n require(_allowedMinter[msg.sender][user], \"Caller not allowed to mint for user\");\n return _mintForMany(gauges, user);\n }\n\n /**\n * @notice The total number of tokens minted for `user` from `gauge`\n */\n function minted(address user, address gauge) external view override returns (uint256) {\n return _minted[user][gauge];\n }\n\n /**\n * @notice Whether `minter` is approved to mint tokens for `user`\n */\n function getMinterApproval(address minter, address user) external view override returns (bool) {\n return _allowedMinter[minter][user];\n }\n\n /**\n * @notice Set whether `minter` is approved to mint tokens on your behalf\n */\n function setMinterApproval(address minter, bool approval) public override {\n _setMinterApproval(minter, msg.sender, approval);\n }\n\n /**\n * @notice Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing\n * them.\n */\n function setMinterApprovalWithSignature(\n address minter,\n bool approval,\n address user,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external override {\n // solhint-disable-next-line not-rely-on-time\n require(deadline > block.timestamp, \"Signature expired\");\n\n uint256 nonce = _nextNonce[user]++;\n\n bytes32 structHash = keccak256(abi.encode(_SET_MINTER_APPROVAL_TYPEHASH, minter, approval, nonce, deadline));\n bytes32 digest = _hashTypedDataV4(structHash);\n\n address recoveredAddress = ecrecover(digest, v, r, s);\n\n // ecrecover returns the zero address on recover failure, so we need to handle that explicitly.\n require(recoveredAddress != address(0) && recoveredAddress == user, \"Invalid signature\");\n\n _setMinterApproval(minter, user, approval);\n }\n\n function _setMinterApproval(\n address minter,\n address user,\n bool approval\n ) private {\n _allowedMinter[minter][user] = approval;\n emit MinterApprovalSet(user, minter, approval);\n }\n\n // Internal functions\n\n function _mintFor(address gauge, address user) internal returns (uint256 tokensToMint) {\n tokensToMint = _updateGauge(gauge, user);\n if (tokensToMint > 0) {\n _tokenAdmin.mint(user, tokensToMint);\n }\n }\n\n function _mintForMany(address[] calldata gauges, address user) internal returns (uint256 tokensToMint) {\n uint256 length = gauges.length;\n for (uint256 i = 0; i < length; ++i) {\n tokensToMint = tokensToMint.add(_updateGauge(gauges[i], user));\n }\n\n if (tokensToMint > 0) {\n _tokenAdmin.mint(user, tokensToMint);\n }\n }\n\n function _updateGauge(address gauge, address user) internal returns (uint256 tokensToMint) {\n require(_gaugeController.gauge_types(gauge) >= 0, \"Gauge does not exist on Controller\");\n\n ILiquidityGauge(gauge).user_checkpoint(user);\n uint256 totalMint = ILiquidityGauge(gauge).integrate_fraction(user);\n tokensToMint = totalMint.sub(_minted[user][gauge]);\n\n if (tokensToMint > 0) {\n _minted[user][gauge] = totalMint;\n emit Minted(user, gauge, totalMint);\n }\n }\n\n // The below functions are near-duplicates of functions available above.\n // They are included for ABI compatibility with snake_casing as used in vyper contracts.\n // solhint-disable func-name-mixedcase\n\n /**\n * @notice Whether `minter` is approved to mint tokens for `user`\n */\n function allowed_to_mint_for(address minter, address user) external view override returns (bool) {\n return _allowedMinter[minter][user];\n }\n\n /**\n * @notice Mint everything which belongs to `msg.sender` across multiple gauges\n * @dev This function is not recommended as `mintMany()` is more flexible and gas efficient\n * @param gauges List of `LiquidityGauge` addresses\n */\n function mint_many(address[8] calldata gauges) external override nonReentrant {\n for (uint256 i = 0; i < 8; ++i) {\n if (gauges[i] == address(0)) {\n break;\n }\n _mintFor(gauges[i], msg.sender);\n }\n }\n\n /**\n * @notice Mint tokens for `user`\n * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n * @param gauge `LiquidityGauge` address to get mintable amount from\n * @param user Address to mint to\n */\n function mint_for(address gauge, address user) external override nonReentrant {\n if (_allowedMinter[msg.sender][user]) {\n _mintFor(gauge, user);\n }\n }\n\n /**\n * @notice Toggle whether `minter` is approved to mint tokens for `user`\n */\n function toggle_approve_mint(address minter) external override {\n setMinterApproval(minter, !_allowedMinter[minter][msg.sender]);\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"./IBalancerTokenAdmin.sol\";\nimport \"./IGaugeController.sol\";\n\ninterface IBalancerMinter {\n event Minted(address indexed recipient, address gauge, uint256 minted);\n\n /**\n * @notice Returns the address of the Balancer Governance Token\n */\n function getBalancerToken() external view returns (IERC20);\n\n /**\n * @notice Returns the address of the Balancer Token Admin contract\n */\n function getBalancerTokenAdmin() external view returns (IBalancerTokenAdmin);\n\n /**\n * @notice Returns the address of the Gauge Controller\n */\n function getGaugeController() external view returns (IGaugeController);\n\n /**\n * @notice Mint everything which belongs to `msg.sender` and send to them\n * @param gauge `LiquidityGauge` address to get mintable amount from\n */\n function mint(address gauge) external returns (uint256);\n\n /**\n * @notice Mint everything which belongs to `msg.sender` across multiple gauges\n * @param gauges List of `LiquidityGauge` addresses\n */\n function mintMany(address[] calldata gauges) external returns (uint256);\n\n /**\n * @notice Mint tokens for `user`\n * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n * @param gauge `LiquidityGauge` address to get mintable amount from\n * @param user Address to mint to\n */\n function mintFor(address gauge, address user) external returns (uint256);\n\n /**\n * @notice Mint tokens for `user` across multiple gauges\n * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n * @param gauges List of `LiquidityGauge` addresses\n * @param user Address to mint to\n */\n function mintManyFor(address[] calldata gauges, address user) external returns (uint256);\n\n /**\n * @notice The total number of tokens minted for `user` from `gauge`\n */\n function minted(address user, address gauge) external view returns (uint256);\n\n /**\n * @notice Whether `minter` is approved to mint tokens for `user`\n */\n function getMinterApproval(address minter, address user) external view returns (bool);\n\n /**\n * @notice Set whether `minter` is approved to mint tokens on your behalf\n */\n function setMinterApproval(address minter, bool approval) external;\n\n /**\n * @notice Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing\n * them.\n */\n function setMinterApprovalWithSignature(\n address minter,\n bool approval,\n address user,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n // The below functions are near-duplicates of functions available above.\n // They are included for ABI compatibility with snake_casing as used in vyper contracts.\n // solhint-disable func-name-mixedcase\n\n /**\n * @notice Whether `minter` is approved to mint tokens for `user`\n */\n function allowed_to_mint_for(address minter, address user) external view returns (bool);\n\n /**\n * @notice Mint everything which belongs to `msg.sender` across multiple gauges\n * @dev This function is not recommended as `mintMany()` is more flexible and gas efficient\n * @param gauges List of `LiquidityGauge` addresses\n */\n function mint_many(address[8] calldata gauges) external;\n\n /**\n * @notice Mint tokens for `user`\n * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n * @param gauge `LiquidityGauge` address to get mintable amount from\n * @param user Address to mint to\n */\n function mint_for(address gauge, address user) external;\n\n /**\n * @notice Toggle whether `minter` is approved to mint tokens for `user`\n */\n function toggle_approve_mint(address minter) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/helpers/IAuthentication.sol\";\n\nimport \"./IBalancerToken.sol\";\n\ninterface IBalancerTokenAdmin is IAuthentication {\n // solhint-disable func-name-mixedcase\n function INITIAL_RATE() external view returns (uint256);\n\n function RATE_REDUCTION_TIME() external view returns (uint256);\n\n function RATE_REDUCTION_COEFFICIENT() external view returns (uint256);\n\n function RATE_DENOMINATOR() external view returns (uint256);\n\n // solhint-enable func-name-mixedcase\n\n /**\n * @notice Returns the address of the Balancer Governance Token\n */\n function getBalancerToken() external view returns (IBalancerToken);\n\n function activate() external;\n\n function rate() external view returns (uint256);\n\n function startEpochTimeWrite() external returns (uint256);\n\n function mint(address to, uint256 amount) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./IAuthorizerAdaptor.sol\";\nimport \"./IVotingEscrow.sol\";\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase\n\ninterface IGaugeController {\n function checkpoint_gauge(address gauge) external;\n\n function gauge_relative_weight(address gauge, uint256 time) external returns (uint256);\n\n function voting_escrow() external view returns (IVotingEscrow);\n\n function token() external view returns (IERC20);\n\n function add_type(string calldata name, uint256 weight) external;\n\n function change_type_weight(int128 typeId, uint256 weight) external;\n\n // Gauges are to be added with zero initial weight so the full signature is not required\n function add_gauge(address gauge, int128 gaugeType) external;\n\n function n_gauge_types() external view returns (int128);\n\n function gauge_types(address gauge) external view returns (int128);\n\n function admin() external view returns (IAuthorizerAdaptor);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase\n\ninterface ILiquidityGauge {\n function integrate_fraction(address user) external view returns (uint256);\n\n function user_checkpoint(address user) external returns (bool);\n\n function is_killed() external view returns (bool);\n\n function killGauge() external;\n\n function unkillGauge() external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\ninterface IBalancerToken is IERC20 {\n function mint(address to, uint256 amount) external;\n\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\n\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\n\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n // solhint-disable-next-line func-name-mixedcase\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32);\n\n // solhint-disable-next-line func-name-mixedcase\n function MINTER_ROLE() external view returns (bytes32);\n\n // solhint-disable-next-line func-name-mixedcase\n function SNAPSHOT_ROLE() external view returns (bytes32);\n\n function snapshot() external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"./IAuthorizerAdaptor.sol\";\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase\n\ninterface IVotingEscrow {\n struct Point {\n int128 bias;\n int128 slope; // - dweight / dt\n uint256 ts;\n uint256 blk; // block\n }\n\n function epoch() external view returns (uint256);\n\n function totalSupply(uint256 timestamp) external view returns (uint256);\n\n function user_point_epoch(address user) external view returns (uint256);\n\n function point_history(uint256 timestamp) external view returns (Point memory);\n\n function user_point_history(address user, uint256 timestamp) external view returns (Point memory);\n\n function checkpoint() external;\n\n function admin() external view returns (IAuthorizerAdaptor);\n\n function smart_wallet_checker() external view returns (address);\n\n function commit_smart_wallet_checker(address newSmartWalletChecker) external;\n\n function apply_smart_wallet_checker() external;\n}\n" + }, + "contracts/test/MockRewardTokenDistributor.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\";\n\n// solhint-disable func-name-mixedcase, var-name-mixedcase, not-rely-on-time\n\n/**\n * @dev This contract is designed to mock LiquidityGaugeV5's interface for distributing external tokens.\n */\ncontract MockRewardTokenDistributor is IRewardTokenDistributor {\n uint256 private _rewardCount;\n IERC20[8] private _rewardTokens;\n mapping(IERC20 => Reward) private _rewardData;\n\n function reward_tokens(uint256 index) external view override returns (IERC20) {\n return _rewardTokens[index];\n }\n\n function reward_data(IERC20 token) external view override returns (Reward memory) {\n return _rewardData[token];\n }\n\n function add_reward(IERC20 rewardToken, address distributor) external override {\n _rewardTokens[_rewardCount] = rewardToken;\n _rewardData[rewardToken] = Reward({\n token: rewardToken,\n distributor: distributor,\n period_finish: 0,\n rate: 0,\n last_update: block.timestamp,\n integral: 0\n });\n\n _rewardCount += 1;\n require(_rewardCount < 8, \"Too many reward tokens\");\n }\n\n function set_reward_distributor(IERC20 rewardToken, address distributor) external override {\n _rewardData[rewardToken].distributor = distributor;\n }\n\n function deposit_reward_token(IERC20 rewardToken, uint256 amount) external override {\n require(_rewardData[rewardToken].distributor == msg.sender, \"Only callable by reward distributor\");\n rewardToken.transferFrom(msg.sender, address(this), amount);\n\n // We don't care about the rest of the update.\n }\n\n function claim_rewards(address user) external override {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase, var-name-mixedcase\n\ninterface IRewardTokenDistributor {\n struct Reward {\n IERC20 token;\n address distributor;\n uint256 period_finish;\n uint256 rate;\n uint256 last_update;\n uint256 integral;\n }\n\n function reward_tokens(uint256 index) external view returns (IERC20);\n\n function reward_data(IERC20 token) external view returns (Reward memory);\n\n function claim_rewards(address user) external;\n\n function add_reward(IERC20 rewardToken, address distributor) external;\n\n function set_reward_distributor(IERC20 rewardToken, address distributor) external;\n\n function deposit_reward_token(IERC20 rewardToken, uint256 amount) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./ILiquidityGauge.sol\";\nimport \"./IRewardTokenDistributor.sol\";\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase, var-name-mixedcase\n\ninterface IStakingLiquidityGauge is IRewardTokenDistributor, ILiquidityGauge, IERC20 {\n function initialize(address lpToken) external;\n\n function lp_token() external view returns (IERC20);\n\n function deposit(uint256 value, address recipient) external;\n\n function withdraw(uint256 value) external;\n}\n" + }, + "contracts/gauges/ethereum/LiquidityGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\";\n\ncontract LiquidityGaugeFactory is ILiquidityGaugeFactory {\n ILiquidityGauge private immutable _gaugeImplementation;\n\n mapping(address => bool) private _isGaugeFromFactory;\n mapping(address => address) private _poolGauge;\n\n event GaugeCreated(address indexed gauge, address indexed pool);\n\n constructor(ILiquidityGauge gauge) {\n _gaugeImplementation = gauge;\n }\n\n /**\n * @notice Returns the address of the implementation used for gauge deployments.\n */\n function getGaugeImplementation() public view returns (ILiquidityGauge) {\n return _gaugeImplementation;\n }\n\n /**\n * @notice Returns the address of the gauge belonging to `pool`.\n */\n function getPoolGauge(address pool) external view returns (ILiquidityGauge) {\n return ILiquidityGauge(_poolGauge[pool]);\n }\n\n /**\n * @notice Returns true if `gauge` was created by this factory.\n */\n function isGaugeFromFactory(address gauge) external view override returns (bool) {\n return _isGaugeFromFactory[gauge];\n }\n\n /**\n * @notice Deploys a new gauge for a Balancer pool.\n * @dev As anyone can register arbitrary Balancer pools with the Vault,\n * it's impossible to prove onchain that `pool` is a \"valid\" deployment.\n *\n * Care must be taken to ensure that gauges deployed from this factory are\n * suitable before they are added to the GaugeController.\n *\n * This factory disallows deploying multiple gauges for a single pool.\n * @param pool The address of the pool for which to deploy a gauge\n * @return The address of the deployed gauge\n */\n function create(address pool) external override returns (address) {\n require(_poolGauge[pool] == address(0), \"Gauge already exists\");\n\n address gauge = Clones.clone(address(_gaugeImplementation));\n\n IStakingLiquidityGauge(gauge).initialize(pool);\n\n _isGaugeFromFactory[gauge] = true;\n _poolGauge[pool] = gauge;\n emit GaugeCreated(gauge, pool);\n\n return gauge;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"./ILiquidityGauge.sol\";\n\ninterface ILiquidityGaugeFactory {\n /**\n * @notice Returns true if `gauge` was created by this factory.\n */\n function isGaugeFromFactory(address gauge) external view returns (bool);\n\n function create(address pool) external returns (address);\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.7.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 // solhint-disable no-inline-assembly\n\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 assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 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 assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 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 assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 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" + }, + "contracts/test/MockLiquidityGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\";\n\nimport \"./MockLiquidityGauge.sol\";\n\ncontract MockLiquidityGaugeFactory is ILiquidityGaugeFactory {\n mapping(address => bool) private _isGaugeFromFactory;\n mapping(address => address) private _poolGauge;\n\n event GaugeCreated(address indexed gauge, address indexed pool);\n\n /**\n * @notice Returns the address of the gauge belonging to `pool`.\n */\n function getPoolGauge(address pool) external view returns (ILiquidityGauge) {\n return ILiquidityGauge(_poolGauge[pool]);\n }\n\n /**\n * @notice Returns true if `gauge` was created by this factory.\n */\n function isGaugeFromFactory(address gauge) external view override returns (bool) {\n return _isGaugeFromFactory[gauge];\n }\n\n function create(address pool) external override returns (address) {\n require(_poolGauge[pool] == address(0), \"Gauge already exists\");\n\n address gauge = address(new MockLiquidityGauge(pool));\n\n _isGaugeFromFactory[gauge] = true;\n _poolGauge[pool] = gauge;\n emit GaugeCreated(gauge, pool);\n\n return gauge;\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @dev Building block for performing access control on external functions.\n *\n * This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied\n * to external functions to only make them callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /**\n * @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n */\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /**\n * @dev Reverts unless the caller is allowed to call the entry point function.\n */\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n _require(_canPerform(actionId, msg.sender), Errors.SENDER_NOT_ALLOWED);\n }\n\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n" + }, + "contracts/test/MockLiquidityGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\ncontract MockLiquidityGauge {\n // solhint-disable-next-line var-name-mixedcase\n address public lp_token;\n\n constructor(address pool) {\n lp_token = pool;\n }\n}\n" + }, + "contracts/BalancerTokenAdmin.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\";\n\n// solhint-disable not-rely-on-time\n\n/**\n * @title Balancer Token Admin\n * @notice This contract holds all admin powers over the BAL token passing through calls\n * while delegating access control to the Balancer Authorizer\n *\n * In addition, calls to the mint function must respect the inflation schedule as defined in this contract.\n * As this contract is the only way to mint BAL tokens this ensures that the maximum allowed supply is enforced\n * @dev This contract exists as a consequence of the gauge systems needing to know a fixed inflation schedule\n * in order to know how much BAL a gauge is allowed to mint. As this does not exist within the BAL token itself\n * it is defined here, we must then wrap the token's minting functionality in order for this to be meaningful.\n */\ncontract BalancerTokenAdmin is IBalancerTokenAdmin, SingletonAuthentication, ReentrancyGuard {\n using Math for uint256;\n\n // Initial inflation rate of 145k BAL per week.\n uint256 public constant override INITIAL_RATE = (145000 * 1e18) / uint256(1 weeks); // BAL has 18 decimals\n uint256 public constant override RATE_REDUCTION_TIME = 365 days;\n uint256 public constant override RATE_REDUCTION_COEFFICIENT = 1189207115002721024; // 2 ** (1/4) * 1e18\n uint256 public constant override RATE_DENOMINATOR = 1e18;\n\n IBalancerToken private immutable _balancerToken;\n\n event MiningParametersUpdated(uint256 rate, uint256 supply);\n\n // Supply Variables\n uint256 private _miningEpoch;\n uint256 private _startEpochTime = type(uint256).max; // Sentinel value for contract not being activated\n uint256 private _startEpochSupply;\n uint256 private _rate;\n\n constructor(IVault vault, IBalancerToken balancerToken) SingletonAuthentication(vault) {\n _balancerToken = balancerToken;\n }\n\n /**\n * @dev Returns the Balancer token.\n */\n function getBalancerToken() external view override returns (IBalancerToken) {\n return _balancerToken;\n }\n\n /**\n * @notice Initiate BAL token inflation schedule\n * @dev Reverts if contract does not have sole minting powers over BAL (and no other minters can be added).\n */\n function activate() external override nonReentrant authenticate {\n require(_startEpochTime == type(uint256).max, \"Already activated\");\n\n // We need to check that this contract can't be bypassed to mint more BAL in the future.\n // If other addresses had minting rights over the BAL token then this inflation schedule\n // could be bypassed by minting new tokens directly on the BalancerGovernanceToken contract.\n\n // On the BalancerGovernanceToken contract the minter role's admin is the DEFAULT_ADMIN_ROLE.\n // No external function exists to change the minter role's admin so we cannot make the list of\n // minters immutable without revoking all access to DEFAULT_ADMIN_ROLE.\n bytes32 minterRole = _balancerToken.MINTER_ROLE();\n bytes32 snapshotRole = _balancerToken.SNAPSHOT_ROLE();\n bytes32 adminRole = _balancerToken.DEFAULT_ADMIN_ROLE();\n\n require(_balancerToken.hasRole(adminRole, address(this)), \"BalancerTokenAdmin is not an admin\");\n\n // All other minters must be removed to avoid inflation schedule enforcement being bypassed.\n uint256 numberOfMinters = _balancerToken.getRoleMemberCount(minterRole);\n for (uint256 i = 0; i < numberOfMinters; ++i) {\n address minter = _balancerToken.getRoleMember(minterRole, 0);\n _balancerToken.revokeRole(minterRole, minter);\n }\n // Give this contract minting rights over the BAL token\n _balancerToken.grantRole(minterRole, address(this));\n\n // BalancerGovernanceToken exposes a role-restricted `snapshot` function for performing onchain voting.\n // We delegate control over this to the Balancer Authorizer by removing this role from all current addresses\n // and exposing a function which defers to the Authorizer for access control.\n uint256 numberOfSnapshotters = _balancerToken.getRoleMemberCount(snapshotRole);\n for (uint256 i = 0; i < numberOfSnapshotters; ++i) {\n address snapshotter = _balancerToken.getRoleMember(snapshotRole, 0);\n _balancerToken.revokeRole(snapshotRole, snapshotter);\n }\n // Give this contract snapshotting rights over the BAL token\n _balancerToken.grantRole(snapshotRole, address(this));\n\n // BalancerTokenAdmin now is the only holder of MINTER_ROLE and SNAPSHOT_ROLE for BalancerGovernanceToken.\n\n // We can't prevent any other admins from granting other addresses these roles however.\n // This undermines the ability for BalancerTokenAdmin to enforce the correct inflation schedule.\n // The only way to prevent this is for BalancerTokenAdmin to be the only admin. We then remove all other admins.\n uint256 numberOfAdmins = _balancerToken.getRoleMemberCount(adminRole);\n uint256 skipSelf = 0;\n for (uint256 i = 0; i < numberOfAdmins; ++i) {\n address admin = _balancerToken.getRoleMember(adminRole, skipSelf);\n if (admin != address(this)) {\n _balancerToken.revokeRole(adminRole, admin);\n } else {\n // This contract is now the admin with index 0, we now delete the address with index 1 instead\n skipSelf = 1;\n }\n }\n\n // BalancerTokenAdmin doesn't actually need admin rights any more and won't grant rights to any more addresses\n // We then renounce our admin role to ensure that another address won't gain absolute minting powers.\n _balancerToken.revokeRole(adminRole, address(this));\n\n // Perform sanity checks to make sure we're not leaving the roles in a broken state\n require(_balancerToken.getRoleMemberCount(adminRole) == 0, \"Address exists with admin rights\");\n require(_balancerToken.hasRole(minterRole, address(this)), \"BalancerTokenAdmin is not a minter\");\n require(_balancerToken.hasRole(snapshotRole, address(this)), \"BalancerTokenAdmin is not a snapshotter\");\n require(_balancerToken.getRoleMemberCount(minterRole) == 1, \"Multiple minters exist\");\n require(_balancerToken.getRoleMemberCount(snapshotRole) == 1, \"Multiple snapshotters exist\");\n\n // As BAL inflation is now enforced by this contract we can initialise the relevant variables.\n _startEpochSupply = _balancerToken.totalSupply();\n _startEpochTime = block.timestamp;\n _rate = INITIAL_RATE;\n emit MiningParametersUpdated(INITIAL_RATE, _startEpochSupply);\n }\n\n /**\n * @notice Mint BAL tokens subject to the defined inflation schedule\n * @dev Callable only by addresses defined in the Balancer Authorizer contract\n */\n function mint(address to, uint256 amount) external override authenticate {\n // Check if we've passed into a new epoch such that we should calculate available supply with a smaller rate.\n if (block.timestamp >= _startEpochTime.add(RATE_REDUCTION_TIME)) {\n _updateMiningParameters();\n }\n\n require(\n _balancerToken.totalSupply().add(amount) <= _availableSupply(),\n \"Mint amount exceeds remaining available supply\"\n );\n _balancerToken.mint(to, amount);\n }\n\n /**\n * @notice Perform a snapshot of BAL token balances\n * @dev Callable only by addresses defined in the Balancer Authorizer contract\n */\n function snapshot() external authenticate {\n _balancerToken.snapshot();\n }\n\n /**\n * @notice Returns the current epoch number.\n */\n function getMiningEpoch() external view returns (uint256) {\n return _miningEpoch;\n }\n\n /**\n * @notice Returns the start timestamp of the current epoch.\n */\n function getStartEpochTime() external view returns (uint256) {\n return _startEpochTime;\n }\n\n /**\n * @notice Returns the start timestamp of the next epoch.\n */\n function getFutureEpochTime() external view returns (uint256) {\n return _startEpochTime.add(RATE_REDUCTION_TIME);\n }\n\n /**\n * @notice Returns the available supply at the beginning of the current epoch.\n */\n function getStartEpochSupply() external view returns (uint256) {\n return _startEpochSupply;\n }\n\n /**\n * @notice Returns the current inflation rate of BAL per second\n */\n function getInflationRate() external view returns (uint256) {\n return _rate;\n }\n\n /**\n * @notice Maximum allowable number of tokens in existence (claimed or unclaimed)\n */\n function getAvailableSupply() external view returns (uint256) {\n return _availableSupply();\n }\n\n /**\n * @notice Get timestamp of the current mining epoch start while simultaneously updating mining parameters\n * @return Timestamp of the current epoch\n */\n function startEpochTimeWrite() external override returns (uint256) {\n return _startEpochTimeWrite();\n }\n\n /**\n * @notice Get timestamp of the next mining epoch start while simultaneously updating mining parameters\n * @return Timestamp of the next epoch\n */\n function futureEpochTimeWrite() external returns (uint256) {\n return _startEpochTimeWrite().add(RATE_REDUCTION_TIME);\n }\n\n /**\n * @notice Update mining rate and supply at the start of the epoch\n * @dev Callable by any address, but only once per epoch\n * Total supply becomes slightly larger if this function is called late\n */\n function updateMiningParameters() external {\n require(block.timestamp >= _startEpochTime.add(RATE_REDUCTION_TIME), \"Epoch has not finished yet\");\n _updateMiningParameters();\n }\n\n /**\n * @notice How much supply is mintable from start timestamp till end timestamp\n * @param start Start of the time interval (timestamp)\n * @param end End of the time interval (timestamp)\n * @return Tokens mintable from `start` till `end`\n */\n function mintableInTimeframe(uint256 start, uint256 end) external view returns (uint256) {\n return _mintableInTimeframe(start, end);\n }\n\n // Internal functions\n\n /**\n * @notice Maximum allowable number of tokens in existence (claimed or unclaimed)\n */\n function _availableSupply() internal view returns (uint256) {\n uint256 newSupplyFromCurrentEpoch = (block.timestamp.sub(_startEpochTime)).mul(_rate);\n return _startEpochSupply.add(newSupplyFromCurrentEpoch);\n }\n\n /**\n * @notice Get timestamp of the current mining epoch start while simultaneously updating mining parameters\n * @return Timestamp of the current epoch\n */\n function _startEpochTimeWrite() internal returns (uint256) {\n uint256 startEpochTime = _startEpochTime;\n if (block.timestamp >= startEpochTime.add(RATE_REDUCTION_TIME)) {\n _updateMiningParameters();\n return _startEpochTime;\n }\n return startEpochTime;\n }\n\n function _updateMiningParameters() internal {\n uint256 inflationRate = _rate;\n uint256 startEpochSupply = _startEpochSupply.add(inflationRate.mul(RATE_REDUCTION_TIME));\n inflationRate = inflationRate.mul(RATE_DENOMINATOR).divDown(RATE_REDUCTION_COEFFICIENT);\n\n _miningEpoch = _miningEpoch.add(1);\n _startEpochTime = _startEpochTime.add(RATE_REDUCTION_TIME);\n _rate = inflationRate;\n _startEpochSupply = startEpochSupply;\n\n emit MiningParametersUpdated(inflationRate, startEpochSupply);\n }\n\n /**\n * @notice How much supply is mintable from start timestamp till end timestamp\n * @param start Start of the time interval (timestamp)\n * @param end End of the time interval (timestamp)\n * @return Tokens mintable from `start` till `end`\n */\n function _mintableInTimeframe(uint256 start, uint256 end) internal view returns (uint256) {\n require(start <= end, \"start > end\");\n\n uint256 currentEpochTime = _startEpochTime;\n uint256 currentRate = _rate;\n\n // It shouldn't be possible to over/underflow in here but we add checked maths to be safe\n\n // Special case if end is in future (not yet minted) epoch\n if (end > currentEpochTime.add(RATE_REDUCTION_TIME)) {\n currentEpochTime = currentEpochTime.add(RATE_REDUCTION_TIME);\n currentRate = currentRate.mul(RATE_DENOMINATOR).divDown(RATE_REDUCTION_COEFFICIENT);\n }\n\n require(end <= currentEpochTime.add(RATE_REDUCTION_TIME), \"too far in future\");\n\n uint256 toMint = 0;\n for (uint256 epoch = 0; epoch < 999; ++epoch) {\n if (end >= currentEpochTime) {\n uint256 currentEnd = end;\n if (currentEnd > currentEpochTime.add(RATE_REDUCTION_TIME)) {\n currentEnd = currentEpochTime.add(RATE_REDUCTION_TIME);\n }\n\n uint256 currentStart = start;\n if (currentStart >= currentEpochTime.add(RATE_REDUCTION_TIME)) {\n // We should never get here but what if...\n break;\n } else if (currentStart < currentEpochTime) {\n currentStart = currentEpochTime;\n }\n\n toMint = toMint.add(currentRate.mul(currentEnd.sub(currentStart)));\n\n if (start >= currentEpochTime) {\n break;\n }\n }\n\n currentEpochTime = currentEpochTime.sub(RATE_REDUCTION_TIME);\n // double-division with rounding made rate a bit less => good\n currentRate = currentRate.mul(RATE_REDUCTION_COEFFICIENT).divDown(RATE_DENOMINATOR);\n assert(currentRate <= INITIAL_RATE);\n }\n\n return toMint;\n }\n\n // The below functions are duplicates of functions available above.\n // They are included for ABI compatibility with snake_casing as used in vyper contracts.\n // solhint-disable func-name-mixedcase\n\n function rate() external view override returns (uint256) {\n return _rate;\n }\n\n function available_supply() external view returns (uint256) {\n return _availableSupply();\n }\n\n /**\n * @notice Get timestamp of the current mining epoch start while simultaneously updating mining parameters\n * @return Timestamp of the current epoch\n */\n function start_epoch_time_write() external returns (uint256) {\n return _startEpochTimeWrite();\n }\n\n /**\n * @notice Get timestamp of the next mining epoch start while simultaneously updating mining parameters\n * @return Timestamp of the next epoch\n */\n function future_epoch_time_write() external returns (uint256) {\n return _startEpochTimeWrite().add(RATE_REDUCTION_TIME);\n }\n\n /**\n * @notice Update mining rate and supply at the start of the epoch\n * @dev Callable by any address, but only once per epoch\n * Total supply becomes slightly larger if this function is called late\n */\n function update_mining_parameters() external {\n require(block.timestamp >= _startEpochTime.add(RATE_REDUCTION_TIME), \"Epoch has not finished yet\");\n _updateMiningParameters();\n }\n\n /**\n * @notice How much supply is mintable from start timestamp till end timestamp\n * @param start Start of the time interval (timestamp)\n * @param end End of the time interval (timestamp)\n * @return Tokens mintable from `start` till `end`\n */\n function mintable_in_timeframe(uint256 start, uint256 end) external view returns (uint256) {\n return _mintableInTimeframe(start, end);\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"./Authentication.sol\";\n\nabstract contract SingletonAuthentication is Authentication {\n IVault private immutable _vault;\n\n // Use the contract's own address to disambiguate action identifiers\n constructor(IVault vault) Authentication(bytes32(uint256(address(this)))) {\n _vault = vault;\n }\n\n /**\n * @notice Returns the Balancer Vault\n */\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /**\n * @notice Returns the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n\n function _canPerform(bytes32 actionId, address account) internal view override returns (bool) {\n return getAuthorizer().canPerform(actionId, account, address(this));\n }\n\n function _canPerform(\n bytes32 actionId,\n address account,\n address where\n ) internal view returns (bool) {\n return getAuthorizer().canPerform(actionId, account, where);\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow checks.\n * Adapted from OpenZeppelin's SafeMath library.\n */\nlibrary Math {\n /**\n * @dev Returns the absolute value of a signed integer.\n */\n function abs(int256 a) internal pure returns (uint256) {\n return a > 0 ? uint256(a) : uint256(-a);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n _require(c >= a, Errors.ADD_OVERFLOW);\n return c;\n }\n\n /**\n * @dev Returns the addition of two signed integers, reverting on overflow.\n */\n function add(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a + b;\n _require((b >= 0 && c >= a) || (b < 0 && c < a), Errors.ADD_OVERFLOW);\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers of 256 bits, reverting on overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b <= a, Errors.SUB_OVERFLOW);\n uint256 c = a - b;\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two signed integers, reverting on overflow.\n */\n function sub(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a - b;\n _require((b >= 0 && c <= a) || (b < 0 && c > a), Errors.SUB_OVERFLOW);\n return c;\n }\n\n /**\n * @dev Returns the largest of two numbers of 256 bits.\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 of 256 bits.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a * b;\n _require(a == 0 || c / a == b, Errors.MUL_OVERFLOW);\n return c;\n }\n\n function div(\n uint256 a,\n uint256 b,\n bool roundUp\n ) internal pure returns (uint256) {\n return roundUp ? divUp(a, b) : divDown(a, b);\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b != 0, Errors.ZERO_DIVISION);\n return a / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b != 0, Errors.ZERO_DIVISION);\n\n if (a == 0) {\n return 0;\n } else {\n return 1 + (a - 1) / b;\n }\n }\n}\n" + }, + "contracts/fee-distribution/FeeDistributor.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\";\n\n// solhint-disable not-rely-on-time\n\n/**\n * @title Fee Distributor\n * @notice Distributes any tokens transferred to the contract (e.g. Protocol fees and any BAL emissions) among veBAL\n * holders proportionally based on a snapshot of the week at which the tokens are sent to the FeeDistributor contract.\n * @dev Supports distributing arbitrarily many different tokens. In order to start distributing a new token to veBAL\n * holders simply transfer the tokens to the `FeeDistributor` contract and then call `checkpointToken`.\n */\ncontract FeeDistributor is IFeeDistributor, ReentrancyGuard {\n using SafeMath for uint256;\n using SafeERC20 for IERC20;\n\n IVotingEscrow private immutable _votingEscrow;\n\n uint256 private immutable _startTime;\n\n // Global State\n uint256 private _timeCursor;\n mapping(uint256 => uint256) private _veSupplyCache;\n\n // Token State\n\n // `startTime` and `timeCursor` are both timestamps so comfortably fit in a uint64.\n // `cachedBalance` will comfortably fit the total supply of any meaningful token.\n // Should more than 2^128 tokens be sent to this contract then checkpointing this token will fail until enough\n // tokens have been claimed to bring the total balance back below 2^128.\n struct TokenState {\n uint64 startTime;\n uint64 timeCursor;\n uint128 cachedBalance;\n }\n mapping(IERC20 => TokenState) private _tokenState;\n mapping(IERC20 => mapping(uint256 => uint256)) private _tokensPerWeek;\n\n // User State\n\n // `startTime` and `timeCursor` are timestamps so will comfortably fit in a uint64.\n // For `lastEpochCheckpointed` to overflow would need over 2^128 transactions to the VotingEscrow contract.\n struct UserState {\n uint64 startTime;\n uint64 timeCursor;\n uint128 lastEpochCheckpointed;\n }\n mapping(address => UserState) private _userState;\n mapping(address => mapping(uint256 => uint256)) private _userBalanceAtTimestamp;\n mapping(address => mapping(IERC20 => uint256)) private _userTokenTimeCursor;\n\n constructor(IVotingEscrow votingEscrow, uint256 startTime) {\n _votingEscrow = votingEscrow;\n\n startTime = _roundDownTimestamp(startTime);\n uint256 currentWeek = _roundDownTimestamp(block.timestamp);\n require(startTime >= currentWeek, \"Cannot start before current week\");\n if (startTime == currentWeek) {\n // We assume that `votingEscrow` has been deployed in a week previous to this one.\n // If `votingEscrow` did not have a non-zero supply at the beginning of the current week\n // then any tokens which are distributed this week will be lost permanently.\n require(votingEscrow.totalSupply(currentWeek) > 0, \"Zero total supply results in lost tokens\");\n }\n _startTime = startTime;\n _timeCursor = startTime;\n }\n\n /**\n * @notice Returns the VotingEscrow (veBAL) token contract\n */\n function getVotingEscrow() external view override returns (IVotingEscrow) {\n return _votingEscrow;\n }\n\n /**\n * @notice Returns the global time cursor representing the most earliest uncheckpointed week.\n */\n function getTimeCursor() external view override returns (uint256) {\n return _timeCursor;\n }\n\n /**\n * @notice Returns the user-level time cursor representing the most earliest uncheckpointed week.\n * @param user - The address of the user to query.\n */\n function getUserTimeCursor(address user) external view override returns (uint256) {\n return _userState[user].timeCursor;\n }\n\n /**\n * @notice Returns the token-level time cursor storing the timestamp at up to which tokens have been distributed.\n * @param token - The ERC20 token address to query.\n */\n function getTokenTimeCursor(IERC20 token) external view override returns (uint256) {\n return _tokenState[token].timeCursor;\n }\n\n /**\n * @notice Returns the user-level time cursor storing the timestamp of the latest token distribution claimed.\n * @param user - The address of the user to query.\n * @param token - The ERC20 token address to query.\n */\n function getUserTokenTimeCursor(address user, IERC20 token) external view override returns (uint256) {\n return _getUserTokenTimeCursor(user, token);\n }\n\n /**\n * @notice Returns the user's cached balance of veBAL as of the provided timestamp.\n * @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n * This function requires `user` to have been checkpointed past `timestamp` so that their balance is cached.\n * @param user - The address of the user of which to read the cached balance of.\n * @param timestamp - The timestamp at which to read the `user`'s cached balance at.\n */\n function getUserBalanceAtTimestamp(address user, uint256 timestamp) external view override returns (uint256) {\n return _userBalanceAtTimestamp[user][timestamp];\n }\n\n /**\n * @notice Returns the cached total supply of veBAL as of the provided timestamp.\n * @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n * This function requires the contract to have been checkpointed past `timestamp` so that the supply is cached.\n * @param timestamp - The timestamp at which to read the cached total supply at.\n */\n function getTotalSupplyAtTimestamp(uint256 timestamp) external view override returns (uint256) {\n return _veSupplyCache[timestamp];\n }\n\n /**\n * @notice Returns the FeeDistributor's cached balance of `token`.\n */\n function getTokenLastBalance(IERC20 token) external view override returns (uint256) {\n return _tokenState[token].cachedBalance;\n }\n\n /**\n * @notice Returns the amount of `token` which the FeeDistributor received in the week beginning at `timestamp`.\n * @param token - The ERC20 token address to query.\n * @param timestamp - The timestamp corresponding to the beginning of the week of interest.\n */\n function getTokensDistributedInWeek(IERC20 token, uint256 timestamp) external view override returns (uint256) {\n return _tokensPerWeek[token][timestamp];\n }\n\n // Depositing\n\n /**\n * @notice Deposits tokens to be distributed in the current week.\n * @dev Sending tokens directly to the FeeDistributor instead of using `depositToken` may result in tokens being\n * retroactively distributed to past weeks, or for the distribution to carry over to future weeks.\n *\n * If for some reason `depositToken` cannot be called, in order to ensure that all tokens are correctly distributed\n * manually call `checkpointToken` before and after the token transfer.\n * @param token - The ERC20 token address to distribute.\n * @param amount - The amount of tokens to deposit.\n */\n function depositToken(IERC20 token, uint256 amount) external override nonReentrant {\n _checkpointToken(token, false);\n token.safeTransferFrom(msg.sender, address(this), amount);\n _checkpointToken(token, true);\n }\n\n /**\n * @notice Deposits tokens to be distributed in the current week.\n * @dev A version of `depositToken` which supports depositing multiple `tokens` at once.\n * See `depositToken` for more details.\n * @param tokens - An array of ERC20 token addresses to distribute.\n * @param amounts - An array of token amounts to deposit.\n */\n function depositTokens(IERC20[] calldata tokens, uint256[] calldata amounts) external override nonReentrant {\n InputHelpers.ensureInputLengthMatch(tokens.length, amounts.length);\n\n uint256 length = tokens.length;\n for (uint256 i = 0; i < length; ++i) {\n _checkpointToken(tokens[i], false);\n tokens[i].safeTransferFrom(msg.sender, address(this), amounts[i]);\n _checkpointToken(tokens[i], true);\n }\n }\n\n // Checkpointing\n\n /**\n * @notice Caches the total supply of veBAL at the beginning of each week.\n * This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n */\n function checkpoint() external override nonReentrant {\n _checkpointTotalSupply();\n }\n\n /**\n * @notice Caches the user's balance of veBAL at the beginning of each week.\n * This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n * @param user - The address of the user to be checkpointed.\n */\n function checkpointUser(address user) external override nonReentrant {\n _checkpointUserBalance(user);\n }\n\n /**\n * @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n * @dev Any `token` balance held by the FeeDistributor above that which is returned by `getTokenLastBalance`\n * will be distributed evenly across the time period since `token` was last checkpointed.\n *\n * This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n * @param token - The ERC20 token address to be checkpointed.\n */\n function checkpointToken(IERC20 token) external override nonReentrant {\n _checkpointToken(token, true);\n }\n\n /**\n * @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n * @dev A version of `checkpointToken` which supports checkpointing multiple tokens.\n * See `checkpointToken` for more details.\n * @param tokens - An array of ERC20 token addresses to be checkpointed.\n */\n function checkpointTokens(IERC20[] calldata tokens) external override nonReentrant {\n uint256 tokensLength = tokens.length;\n for (uint256 i = 0; i < tokensLength; ++i) {\n _checkpointToken(tokens[i], true);\n }\n }\n\n // Claiming\n\n /**\n * @notice Claims all pending distributions of the provided token for a user.\n * @dev It's not necessary to explicitly checkpoint before calling this function, it will ensure the FeeDistributor\n * is up to date before calculating the amount of tokens to be claimed.\n * @param user - The user on behalf of which to claim.\n * @param token - The ERC20 token address to be claimed.\n * @return The amount of `token` sent to `user` as a result of claiming.\n */\n function claimToken(address user, IERC20 token) external override nonReentrant returns (uint256) {\n _checkpointTotalSupply();\n _checkpointToken(token, false);\n _checkpointUserBalance(user);\n\n uint256 amount = _claimToken(user, token);\n return amount;\n }\n\n /**\n * @notice Claims a number of tokens on behalf of a user.\n * @dev A version of `claimToken` which supports claiming multiple `tokens` on behalf of `user`.\n * See `claimToken` for more details.\n * @param user - The user on behalf of which to claim.\n * @param tokens - An array of ERC20 token addresses to be claimed.\n * @return An array of the amounts of each token in `tokens` sent to `user` as a result of claiming.\n */\n function claimTokens(address user, IERC20[] calldata tokens)\n external\n override\n nonReentrant\n returns (uint256[] memory)\n {\n // Prevent someone from assigning tokens to an inaccessible week.\n require(block.timestamp > _startTime, \"Fee distribution has not started yet\");\n _checkpointTotalSupply();\n _checkpointUserBalance(user);\n\n uint256 tokensLength = tokens.length;\n uint256[] memory amounts = new uint256[](tokensLength);\n for (uint256 i = 0; i < tokensLength; ++i) {\n _checkpointToken(tokens[i], false);\n amounts[i] = _claimToken(user, tokens[i]);\n }\n\n return amounts;\n }\n\n // Internal functions\n\n /**\n * @dev It is required that both the global, token and user state have been properly checkpointed\n * before calling this function.\n */\n function _claimToken(address user, IERC20 token) internal returns (uint256) {\n TokenState storage tokenState = _tokenState[token];\n uint256 userTimeCursor = _getUserTokenTimeCursor(user, token);\n // We round `_tokenTimeCursor` down so it represents the beginning of the first incomplete week.\n uint256 currentActiveWeek = _roundDownTimestamp(tokenState.timeCursor);\n mapping(uint256 => uint256) storage tokensPerWeek = _tokensPerWeek[token];\n mapping(uint256 => uint256) storage userBalanceAtTimestamp = _userBalanceAtTimestamp[user];\n\n uint256 amount;\n for (uint256 i = 0; i < 20; ++i) {\n // We only want to claim for complete weeks so break once we reach `currentActiveWeek`.\n // This is as `tokensPerWeek[currentActiveWeek]` will continue to grow over the week.\n if (userTimeCursor >= currentActiveWeek) break;\n\n amount +=\n (tokensPerWeek[userTimeCursor] * userBalanceAtTimestamp[userTimeCursor]) /\n _veSupplyCache[userTimeCursor];\n userTimeCursor += 1 weeks;\n }\n // Update the stored user-token time cursor to prevent this user claiming this week again.\n _userTokenTimeCursor[user][token] = userTimeCursor;\n\n if (amount > 0) {\n // For a token to be claimable it must have been added to the cached balance so this is safe.\n tokenState.cachedBalance = uint128(tokenState.cachedBalance - amount);\n token.safeTransfer(user, amount);\n emit TokensClaimed(user, token, amount, userTimeCursor);\n }\n\n return amount;\n }\n\n /**\n * @dev Calculate the amount of `token` to be distributed to `_votingEscrow` holders since the last checkpoint.\n */\n function _checkpointToken(IERC20 token, bool force) internal {\n TokenState storage tokenState = _tokenState[token];\n uint256 lastTokenTime = tokenState.timeCursor;\n uint256 timeSinceLastCheckpoint;\n if (lastTokenTime == 0) {\n // If it's the first time we're checkpointing this token then start distributing from now.\n // Also mark at which timestamp users should start attempts to claim this token from.\n lastTokenTime = block.timestamp;\n tokenState.startTime = uint64(_roundDownTimestamp(block.timestamp));\n\n // Prevent someone from assigning tokens to an inaccessible week.\n require(block.timestamp > _startTime, \"Fee distribution has not started yet\");\n } else {\n timeSinceLastCheckpoint = block.timestamp - lastTokenTime;\n\n if (!force) {\n // Checkpointing N times within a single week is completely equivalent to checkpointing once at the end.\n // We then want to get as close as possible to a single checkpoint every Wed 23:59 UTC to save gas.\n\n // We then skip checkpointing if we're in the same week as the previous checkpoint.\n bool alreadyCheckpointedThisWeek = _roundDownTimestamp(block.timestamp) ==\n _roundDownTimestamp(lastTokenTime);\n // However we want to ensure that all of this week's fees are assigned to the current week without\n // overspilling into the next week. To mitigate this, we checkpoint if we're near the end of the week.\n bool nearingEndOfWeek = _roundUpTimestamp(block.timestamp) - block.timestamp < 1 days;\n\n // This ensures that we checkpoint once at the beginning of the week and again for each user interaction\n // towards the end of the week to give an accurate final reading of the balance.\n if (alreadyCheckpointedThisWeek && !nearingEndOfWeek) {\n return;\n }\n }\n }\n\n tokenState.timeCursor = uint64(block.timestamp);\n\n uint256 tokenBalance = token.balanceOf(address(this));\n uint256 tokensToDistribute = tokenBalance.sub(tokenState.cachedBalance);\n if (tokensToDistribute == 0) return;\n require(tokenBalance <= type(uint128).max, \"Maximum token balance exceeded\");\n tokenState.cachedBalance = uint128(tokenBalance);\n\n uint256 thisWeek = _roundDownTimestamp(lastTokenTime);\n uint256 nextWeek = 0;\n\n // Distribute `tokensToDistribute` evenly across the time period from `lastTokenTime` to now.\n // These tokens are assigned to weeks proportionally to how much of this period falls into each week.\n mapping(uint256 => uint256) storage tokensPerWeek = _tokensPerWeek[token];\n for (uint256 i = 0; i < 20; ++i) {\n // This is safe as we're incrementing a timestamp.\n nextWeek = thisWeek + 1 weeks;\n if (block.timestamp < nextWeek) {\n // `thisWeek` is now the beginning of the current week, i.e. this is the final iteration.\n if (timeSinceLastCheckpoint == 0 && block.timestamp == lastTokenTime) {\n tokensPerWeek[thisWeek] += tokensToDistribute;\n } else {\n // block.timestamp >= lastTokenTime by definition.\n tokensPerWeek[thisWeek] +=\n (tokensToDistribute * (block.timestamp - lastTokenTime)) /\n timeSinceLastCheckpoint;\n }\n // As we've caught up to the present then we should now break.\n break;\n } else {\n // We've gone a full week or more without checkpointing so need to distribute tokens to previous weeks.\n if (timeSinceLastCheckpoint == 0 && nextWeek == lastTokenTime) {\n // It shouldn't be possible to enter this block\n tokensPerWeek[thisWeek] += tokensToDistribute;\n } else {\n // nextWeek > lastTokenTime by definition.\n tokensPerWeek[thisWeek] +=\n (tokensToDistribute * (nextWeek - lastTokenTime)) /\n timeSinceLastCheckpoint;\n }\n }\n\n // We've now \"checkpointed\" up to the beginning of next week so must update timestamps appropriately.\n lastTokenTime = nextWeek;\n thisWeek = nextWeek;\n }\n\n emit TokenCheckpointed(token, tokensToDistribute, lastTokenTime);\n }\n\n /**\n * @dev Cache the `user`'s balance of `_votingEscrow` at the beginning of each new week\n */\n function _checkpointUserBalance(address user) internal {\n uint256 maxUserEpoch = _votingEscrow.user_point_epoch(user);\n\n // If user has no epochs then they have never locked veBAL.\n // They clearly will not then receive fees.\n if (maxUserEpoch == 0) return;\n\n UserState storage userState = _userState[user];\n\n // weekCursor represents the timestamp of the beginning of the week from which we\n // start checkpointing the user's VotingEscrow balance.\n uint256 weekCursor = userState.timeCursor;\n\n uint256 userEpoch;\n if (weekCursor == 0) {\n // First checkpoint for user so need to do the initial binary search\n userEpoch = _findTimestampUserEpoch(user, _startTime, maxUserEpoch);\n } else {\n if (weekCursor == _roundDownTimestamp(block.timestamp)) {\n // User has checkpointed this week already so perform early return\n return;\n }\n // Otherwise use the value saved from last time\n userEpoch = userState.lastEpochCheckpointed;\n }\n\n // Epoch 0 is always empty so bump onto the next one so that we start on a valid epoch.\n if (userEpoch == 0) {\n userEpoch = 1;\n }\n\n IVotingEscrow.Point memory userPoint = _votingEscrow.user_point_history(user, userEpoch);\n\n // If this is the first checkpoint for the user, calculate the first week they're eligible for.\n // i.e. the timestamp of the first Thursday after they locked.\n // If this is earlier then the first distribution then fast forward to then.\n if (weekCursor == 0) {\n weekCursor = Math.max(_startTime, _roundUpTimestamp(userPoint.ts));\n userState.startTime = uint64(weekCursor);\n }\n\n // It's safe to increment `userEpoch` and `weekCursor` in this loop as epochs and timestamps\n // are always much smaller than 2^256 and are being incremented by small values.\n IVotingEscrow.Point memory oldUserPoint;\n for (uint256 i = 0; i < 50; ++i) {\n // Break if we're trying to cache the user's balance at a timestamp in the future\n if (weekCursor > block.timestamp) {\n break;\n }\n\n if (weekCursor >= userPoint.ts && userEpoch <= maxUserEpoch) {\n // The week being considered is contained in an epoch after the user epoch described by `oldUserPoint`.\n // We then shift `userPoint` into `oldUserPoint` and query the Point for the next user epoch.\n // We do this in order to step though epochs until we find the first epoch starting after `weekCursor`,\n // making the previous epoch the one that contains `weekCursor`.\n userEpoch += 1;\n oldUserPoint = userPoint;\n if (userEpoch > maxUserEpoch) {\n userPoint = IVotingEscrow.Point(0, 0, 0, 0);\n } else {\n userPoint = _votingEscrow.user_point_history(user, userEpoch);\n }\n } else {\n // The week being considered lies inside the user epoch described by `oldUserPoint`\n // we can then use it to calculate the user's balance at the beginning of the week.\n\n int128 dt = int128(weekCursor - oldUserPoint.ts);\n uint256 userBalance = oldUserPoint.bias > oldUserPoint.slope * dt\n ? uint256(oldUserPoint.bias - oldUserPoint.slope * dt)\n : 0;\n\n // User's lock has expired and they haven't relocked yet.\n if (userBalance == 0 && userEpoch > maxUserEpoch) {\n weekCursor = _roundUpTimestamp(block.timestamp);\n break;\n }\n\n // User had a nonzero lock and so is eligible to collect fees.\n _userBalanceAtTimestamp[user][weekCursor] = userBalance;\n\n weekCursor += 1 weeks;\n }\n }\n\n // userEpoch > 0 so this is safe.\n userState.lastEpochCheckpointed = uint64(userEpoch - 1);\n userState.timeCursor = uint64(weekCursor);\n }\n\n /**\n * @dev Cache the totalSupply of VotingEscrow token at the beginning of each new week\n */\n function _checkpointTotalSupply() internal {\n uint256 timeCursor = _timeCursor;\n uint256 weekStart = _roundDownTimestamp(block.timestamp);\n\n // We expect `timeCursor == weekStart + 1 weeks` when fully up to date.\n if (timeCursor > weekStart) {\n // We've already checkpointed up to this week so perform early return\n return;\n }\n\n _votingEscrow.checkpoint();\n\n // Step through the each week and cache the total supply at beginning of week on this contract\n for (uint256 i = 0; i < 20; ++i) {\n if (timeCursor > weekStart) break;\n\n _veSupplyCache[timeCursor] = _votingEscrow.totalSupply(timeCursor);\n\n // This is safe as we're incrementing a timestamp\n timeCursor += 1 weeks;\n }\n // Update state to the end of the current week (`weekStart` + 1 weeks)\n _timeCursor = timeCursor;\n }\n\n // Helper functions\n\n /**\n * @dev Wrapper around `_userTokenTimeCursor` which returns the start timestamp for `token`\n * if `user` has not attempted to interact with it previously.\n */\n function _getUserTokenTimeCursor(address user, IERC20 token) internal view returns (uint256) {\n uint256 userTimeCursor = _userTokenTimeCursor[user][token];\n if (userTimeCursor > 0) return userTimeCursor;\n // This is the first time that the user has interacted with this token.\n // We then start from the latest out of either when `user` first locked veBAL or `token` was first checkpointed.\n return Math.max(_userState[user].startTime, _tokenState[token].startTime);\n }\n\n /**\n * @dev Return the user epoch number for `user` corresponding to the provided `timestamp`\n */\n function _findTimestampUserEpoch(\n address user,\n uint256 timestamp,\n uint256 maxUserEpoch\n ) internal view returns (uint256) {\n uint256 min = 0;\n uint256 max = maxUserEpoch;\n\n // Perform binary search through epochs to find epoch containing `timestamp`\n for (uint256 i = 0; i < 128; ++i) {\n if (min >= max) break;\n\n // Algorithm assumes that inputs are less than 2^128 so this operation is safe.\n // +2 avoids getting stuck in min == mid < max\n uint256 mid = (min + max + 2) / 2;\n IVotingEscrow.Point memory pt = _votingEscrow.user_point_history(user, mid);\n if (pt.ts <= timestamp) {\n min = mid;\n } else {\n // max > min so this is safe.\n max = mid - 1;\n }\n }\n return min;\n }\n\n /**\n * @dev Rounds the provided timestamp down to the beginning of the previous week (Thurs 00:00 UTC)\n */\n function _roundDownTimestamp(uint256 timestamp) private pure returns (uint256) {\n // Division by zero or overflows are impossible here.\n return (timestamp / 1 weeks) * 1 weeks;\n }\n\n /**\n * @dev Rounds the provided timestamp up to the beginning of the next week (Thurs 00:00 UTC)\n */\n function _roundUpTimestamp(uint256 timestamp) private pure returns (uint256) {\n // Overflows are impossible here for all realistic inputs.\n return _roundDownTimestamp(timestamp + 1 weeks - 1);\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./IVotingEscrow.sol\";\n\n/**\n * @title Fee Distributor\n * @notice Distributes any tokens transferred to the contract (e.g. Protocol fees and any BAL emissions) among veBAL\n * holders proportionally based on a snapshot of the week at which the tokens are sent to the FeeDistributor contract.\n * @dev Supports distributing arbitrarily many different tokens. In order to start distributing a new token to veBAL\n * holders simply transfer the tokens to the `FeeDistributor` contract and then call `checkpointToken`.\n */\ninterface IFeeDistributor {\n event TokenCheckpointed(IERC20 token, uint256 amount, uint256 lastCheckpointTimestamp);\n event TokensClaimed(address user, IERC20 token, uint256 amount, uint256 userTokenTimeCursor);\n\n /**\n * @notice Returns the VotingEscrow (veBAL) token contract\n */\n function getVotingEscrow() external view returns (IVotingEscrow);\n\n /**\n * @notice Returns the global time cursor representing the most earliest uncheckpointed week.\n */\n function getTimeCursor() external view returns (uint256);\n\n /**\n * @notice Returns the user-level time cursor representing the most earliest uncheckpointed week.\n * @param user - The address of the user to query.\n */\n function getUserTimeCursor(address user) external view returns (uint256);\n\n /**\n * @notice Returns the token-level time cursor storing the timestamp at up to which tokens have been distributed.\n * @param token - The ERC20 token address to query.\n */\n function getTokenTimeCursor(IERC20 token) external view returns (uint256);\n\n /**\n * @notice Returns the user-level time cursor storing the timestamp of the latest token distribution claimed.\n * @param user - The address of the user to query.\n * @param token - The ERC20 token address to query.\n */\n function getUserTokenTimeCursor(address user, IERC20 token) external view returns (uint256);\n\n /**\n * @notice Returns the user's cached balance of veBAL as of the provided timestamp.\n * @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n * This function requires `user` to have been checkpointed past `timestamp` so that their balance is cached.\n * @param user - The address of the user of which to read the cached balance of.\n * @param timestamp - The timestamp at which to read the `user`'s cached balance at.\n */\n function getUserBalanceAtTimestamp(address user, uint256 timestamp) external view returns (uint256);\n\n /**\n * @notice Returns the cached total supply of veBAL as of the provided timestamp.\n * @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n * This function requires the contract to have been checkpointed past `timestamp` so that the supply is cached.\n * @param timestamp - The timestamp at which to read the cached total supply at.\n */\n function getTotalSupplyAtTimestamp(uint256 timestamp) external view returns (uint256);\n\n /**\n * @notice Returns the FeeDistributor's cached balance of `token`.\n */\n function getTokenLastBalance(IERC20 token) external view returns (uint256);\n\n /**\n * @notice Returns the amount of `token` which the FeeDistributor received in the week beginning at `timestamp`.\n * @param token - The ERC20 token address to query.\n * @param timestamp - The timestamp corresponding to the beginning of the week of interest.\n */\n function getTokensDistributedInWeek(IERC20 token, uint256 timestamp) external view returns (uint256);\n\n // Depositing\n\n /**\n * @notice Deposits tokens to be distributed in the current week.\n * @dev Sending tokens directly to the FeeDistributor instead of using `depositTokens` may result in tokens being\n * retroactively distributed to past weeks, or for the distribution to carry over to future weeks.\n *\n * If for some reason `depositTokens` cannot be called, in order to ensure that all tokens are correctly distributed\n * manually call `checkpointToken` before and after the token transfer.\n * @param token - The ERC20 token address to distribute.\n * @param amount - The amount of tokens to deposit.\n */\n function depositToken(IERC20 token, uint256 amount) external;\n\n /**\n * @notice Deposits tokens to be distributed in the current week.\n * @dev A version of `depositToken` which supports depositing multiple `tokens` at once.\n * See `depositToken` for more details.\n * @param tokens - An array of ERC20 token addresses to distribute.\n * @param amounts - An array of token amounts to deposit.\n */\n function depositTokens(IERC20[] calldata tokens, uint256[] calldata amounts) external;\n\n // Checkpointing\n\n /**\n * @notice Caches the total supply of veBAL at the beginning of each week.\n * This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n */\n function checkpoint() external;\n\n /**\n * @notice Caches the user's balance of veBAL at the beginning of each week.\n * This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n * @param user - The address of the user to be checkpointed.\n */\n function checkpointUser(address user) external;\n\n /**\n * @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n * @dev Any `token` balance held by the FeeDistributor above that which is returned by `getTokenLastBalance`\n * will be distributed evenly across the time period since `token` was last checkpointed.\n *\n * This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n * @param token - The ERC20 token address to be checkpointed.\n */\n function checkpointToken(IERC20 token) external;\n\n /**\n * @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n * @dev A version of `checkpointToken` which supports checkpointing multiple tokens.\n * See `checkpointToken` for more details.\n * @param tokens - An array of ERC20 token addresses to be checkpointed.\n */\n function checkpointTokens(IERC20[] calldata tokens) external;\n\n // Claiming\n\n /**\n * @notice Claims all pending distributions of the provided token for a user.\n * @dev It's not necessary to explicitly checkpoint before calling this function, it will ensure the FeeDistributor\n * is up to date before calculating the amount of tokens to be claimed.\n * @param user - The user on behalf of which to claim.\n * @param token - The ERC20 token address to be claimed.\n * @return The amount of `token` sent to `user` as a result of claiming.\n */\n function claimToken(address user, IERC20 token) external returns (uint256);\n\n /**\n * @notice Claims a number of tokens on behalf of a user.\n * @dev A version of `claimToken` which supports claiming multiple `tokens` on behalf of `user`.\n * See `claimToken` for more details.\n * @param user - The user on behalf of which to claim.\n * @param tokens - An array of ERC20 token addresses to be claimed.\n * @return An array of the amounts of each token in `tokens` sent to `user` as a result of claiming.\n */\n function claimTokens(address user, IERC20[] calldata tokens) external returns (uint256[] memory);\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\nlibrary InputHelpers {\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n _require(a == b, Errors.INPUT_LENGTH_MISMATCH);\n }\n\n function ensureInputLengthMatch(\n uint256 a,\n uint256 b,\n uint256 c\n ) internal pure {\n _require(a == b && b == c, Errors.INPUT_LENGTH_MISMATCH);\n }\n\n function ensureArrayIsSorted(IERC20[] memory array) internal pure {\n address[] memory addressArray;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n addressArray := array\n }\n ensureArrayIsSorted(addressArray);\n }\n\n function ensureArrayIsSorted(address[] memory array) internal pure {\n if (array.length < 2) {\n return;\n }\n\n address previous = array[0];\n for (uint256 i = 1; i < array.length; ++i) {\n address current = array[i];\n _require(previous < current, Errors.UNSORTED_ARRAY);\n previous = current;\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// Based on the ReentrancyGuard library from OpenZeppelin Contracts, altered to reduce gas costs.\n// The `safeTransfer` and `safeTransferFrom` functions assume that `token` is a contract (an account with code), and\n// work differently from the OpenZeppelin version if it is not.\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.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 function safeTransfer(\n IERC20 token,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(address(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(address(token), abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\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 *\n * WARNING: `token` is assumed to be a contract: calls to EOAs will *not* revert.\n */\n function _callOptionalReturn(address 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.\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = token.call(data);\n\n // If the low-level call didn't succeed we return whatever was returned from it.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n if eq(success, 0) {\n returndatacopy(0, 0, returndatasize())\n revert(0, returndatasize())\n }\n }\n\n // Finally we check the returndata size is either zero or true - note that this check will always pass for EOAs\n _require(returndata.length == 0 || abi.decode(returndata, (bool)), Errors.SAFE_ERC20_CALL_FAILED);\n }\n}\n" + }, + "contracts/gauges/ethereum/SingleRecipientGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\";\n\nimport \"../StakelessGauge.sol\";\n\ncontract SingleRecipientGauge is ISingleRecipientGauge, StakelessGauge {\n using SafeERC20 for IERC20;\n\n address private _recipient;\n\n constructor(IBalancerMinter minter) StakelessGauge(minter) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function initialize(address recipient) external override {\n // This will revert in all calls except the first one\n __StakelessGauge_init();\n\n _recipient = recipient;\n }\n\n function getRecipient() external view override returns (address) {\n return _recipient;\n }\n\n function _postMintAction(uint256 mintAmount) internal override {\n _balToken.safeTransfer(_recipient, mintAmount);\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"./IStakelessGauge.sol\";\n\ninterface ISingleRecipientGauge is IStakelessGauge {\n function initialize(address recipient) external;\n\n function getRecipient() external view returns (address);\n}\n" + }, + "contracts/gauges/StakelessGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\";\n\nabstract contract StakelessGauge is IStakelessGauge, ReentrancyGuard {\n IERC20 internal immutable _balToken;\n IBalancerTokenAdmin private immutable _tokenAdmin;\n IBalancerMinter private immutable _minter;\n IGaugeController private immutable _gaugeController;\n IAuthorizerAdaptor private immutable _authorizerAdaptor;\n\n event Checkpoint(uint256 indexed periodTime, uint256 periodEmissions);\n\n // solhint-disable var-name-mixedcase\n uint256 private immutable _RATE_REDUCTION_TIME;\n uint256 private immutable _RATE_REDUCTION_COEFFICIENT;\n uint256 private immutable _RATE_DENOMINATOR;\n // solhint-enable var-name-mixedcase\n\n uint256 private _rate;\n uint256 private _period;\n uint256 private _startEpochTime;\n\n uint256 private _emissions;\n bool private _isKilled;\n\n constructor(IBalancerMinter minter) {\n IBalancerTokenAdmin tokenAdmin = IBalancerTokenAdmin(minter.getBalancerTokenAdmin());\n IERC20 balToken = tokenAdmin.getBalancerToken();\n IGaugeController gaugeController = minter.getGaugeController();\n\n _balToken = balToken;\n _tokenAdmin = tokenAdmin;\n _minter = minter;\n _gaugeController = gaugeController;\n _authorizerAdaptor = gaugeController.admin();\n\n _RATE_REDUCTION_TIME = tokenAdmin.RATE_REDUCTION_TIME();\n _RATE_REDUCTION_COEFFICIENT = tokenAdmin.RATE_REDUCTION_COEFFICIENT();\n _RATE_DENOMINATOR = tokenAdmin.RATE_DENOMINATOR();\n\n // Prevent initialisation of implementation contract\n // Choice of `type(uint256).max` prevents implementation from being checkpointed\n _period = type(uint256).max;\n }\n\n // solhint-disable-next-line func-name-mixedcase\n function __StakelessGauge_init() internal {\n require(_period == 0, \"Already initialized\");\n\n // Because we calculate the rate locally, this gauge cannot\n // be used prior to the start of the first emission period\n uint256 rate = _tokenAdmin.rate();\n require(rate != 0, \"BalancerTokenAdmin not yet activated\");\n\n _rate = rate;\n _period = _currentPeriod();\n _startEpochTime = _tokenAdmin.startEpochTimeWrite();\n }\n\n function checkpoint() external payable override nonReentrant returns (bool) {\n require(msg.sender == address(_authorizerAdaptor), \"SENDER_NOT_ALLOWED\");\n uint256 lastPeriod = _period;\n uint256 currentPeriod = _currentPeriod();\n\n if (lastPeriod < currentPeriod) {\n _gaugeController.checkpoint_gauge(address(this));\n\n uint256 rate = _rate;\n uint256 newEmissions = 0;\n lastPeriod += 1;\n uint256 nextEpochTime = _startEpochTime + _RATE_REDUCTION_TIME;\n for (uint256 i = lastPeriod; i < lastPeriod + 255; ++i) {\n if (i > currentPeriod) break;\n\n uint256 periodTime = i * 1 weeks;\n uint256 periodEmission = 0;\n uint256 gaugeWeight = _gaugeController.gauge_relative_weight(address(this), periodTime);\n\n if (nextEpochTime >= periodTime && nextEpochTime < periodTime + 1 weeks) {\n // If the period crosses an epoch, we calculate a reduction in the rate\n // using the same formula as used in `BalancerTokenAdmin`. We perform the calculation\n // locally instead of calling to `BalancerTokenAdmin.rate()` because we are generating\n // the emissions for the upcoming week, so there is a possibility the new\n // rate has not yet been applied.\n\n // Calculate emission up until the epoch change\n uint256 durationInCurrentEpoch = nextEpochTime - periodTime;\n periodEmission = (gaugeWeight * rate * durationInCurrentEpoch) / 10**18;\n // Action the decrease in rate\n rate = (rate * _RATE_DENOMINATOR) / _RATE_REDUCTION_COEFFICIENT;\n // Calculate emission from epoch change to end of period\n uint256 durationInNewEpoch = 1 weeks - durationInCurrentEpoch;\n periodEmission += (gaugeWeight * rate * durationInNewEpoch) / 10**18;\n\n _rate = rate;\n _startEpochTime = nextEpochTime;\n nextEpochTime += _RATE_REDUCTION_TIME;\n } else {\n periodEmission = (gaugeWeight * rate * 1 weeks) / 10**18;\n }\n\n emit Checkpoint(periodTime, periodEmission);\n newEmissions += periodEmission;\n }\n\n _period = currentPeriod;\n _emissions += newEmissions;\n\n if (newEmissions > 0 && !_isKilled) {\n _minter.mint(address(this));\n _postMintAction(newEmissions);\n }\n }\n\n return true;\n }\n\n function _currentPeriod() internal view returns (uint256) {\n // solhint-disable-next-line not-rely-on-time\n return (block.timestamp / 1 weeks) - 1;\n }\n\n function _postMintAction(uint256 mintAmount) internal virtual;\n\n // solhint-disable func-name-mixedcase\n\n function user_checkpoint(address) external pure override returns (bool) {\n return true;\n }\n\n function integrate_fraction(address user) external view override returns (uint256) {\n require(user == address(this), \"Gauge can only mint for itself\");\n return _emissions;\n }\n\n function is_killed() external view override returns (bool) {\n return _isKilled;\n }\n\n /**\n * @notice Kills the gauge so it cannot mint BAL\n */\n function killGauge() external override {\n require(msg.sender == address(_authorizerAdaptor), \"SENDER_NOT_ALLOWED\");\n _isKilled = true;\n }\n\n /**\n * @notice Unkills the gauge so it can mint BAL again\n */\n function unkillGauge() external override {\n require(msg.sender == address(_authorizerAdaptor), \"SENDER_NOT_ALLOWED\");\n _isKilled = false;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"./ILiquidityGauge.sol\";\n\ninterface IStakelessGauge is ILiquidityGauge {\n function checkpoint() external payable returns (bool);\n}\n" + }, + "contracts/gauges/ethereum/SingleRecipientGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\";\n\nimport \"./SingleRecipientGauge.sol\";\n\ncontract SingleRecipientGaugeFactory is ISingleRecipientGaugeFactory {\n ISingleRecipientGauge private _gaugeImplementation;\n\n mapping(address => bool) private _isGaugeFromFactory;\n mapping(address => address) private _recipientGauge;\n\n event SingleRecipientGaugeCreated(address indexed gauge, address indexed recipient);\n\n constructor(IBalancerMinter minter) {\n _gaugeImplementation = new SingleRecipientGauge(minter);\n }\n\n /**\n * @notice Returns the address of the implementation used for gauge deployments.\n */\n function getGaugeImplementation() public view returns (ISingleRecipientGauge) {\n return _gaugeImplementation;\n }\n\n /**\n * @notice Returns true if `gauge` was created by this factory.\n */\n function isGaugeFromFactory(address gauge) external view override returns (bool) {\n return _isGaugeFromFactory[gauge];\n }\n\n /**\n * @notice Returns the gauge which sends funds to `recipient`.\n */\n function getRecipientGauge(address recipient) external view override returns (ILiquidityGauge) {\n return ILiquidityGauge(_recipientGauge[recipient]);\n }\n\n /**\n * @notice Returns the recipient of `gauge`.\n */\n function getGaugeRecipient(address gauge) external view override returns (address) {\n return ISingleRecipientGauge(gauge).getRecipient();\n }\n\n /**\n * @notice Deploys a new gauge which sends all of its BAL allowance to a single recipient.\n * @dev Care must be taken to ensure that gauges deployed from this factory are\n * suitable before they are added to the GaugeController.\n * @param recipient The address to receive BAL minted from the gauge\n * @return The address of the deployed gauge\n */\n function create(address recipient) external override returns (address) {\n require(_recipientGauge[recipient] == address(0), \"Gauge already exists\");\n\n address gauge = Clones.clone(address(_gaugeImplementation));\n\n ISingleRecipientGauge(gauge).initialize(recipient);\n\n _isGaugeFromFactory[gauge] = true;\n _recipientGauge[recipient] = gauge;\n emit SingleRecipientGaugeCreated(gauge, recipient);\n\n return gauge;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"./ILiquidityGaugeFactory.sol\";\n\ninterface ISingleRecipientGaugeFactory is ILiquidityGaugeFactory {\n /**\n * @notice Returns the gauge which sends funds to `recipient`.\n */\n function getRecipientGauge(address recipient) external view returns (ILiquidityGauge);\n\n /**\n * @notice Returns the recipient of `gauge`.\n */\n function getGaugeRecipient(address gauge) external view returns (address);\n}\n" + }, + "contracts/gauges/polygon/PolygonRootGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\";\n\nimport \"./PolygonRootGauge.sol\";\n\ncontract PolygonRootGaugeFactory is ISingleRecipientGaugeFactory {\n ISingleRecipientGauge private _gaugeImplementation;\n\n mapping(address => bool) private _isGaugeFromFactory;\n mapping(address => address) private _recipientGauge;\n\n event PolygonRootGaugeCreated(address indexed gauge, address indexed recipient);\n\n constructor(\n IBalancerMinter minter,\n IPolygonRootChainManager polygonRootChainManager,\n address polygonERC20Predicate\n ) {\n _gaugeImplementation = new PolygonRootGauge(minter, polygonRootChainManager, polygonERC20Predicate);\n }\n\n /**\n * @notice Returns the address of the implementation used for gauge deployments.\n */\n function getGaugeImplementation() public view returns (ISingleRecipientGauge) {\n return _gaugeImplementation;\n }\n\n /**\n * @notice Returns true if `gauge` was created by this factory.\n */\n function isGaugeFromFactory(address gauge) external view override returns (bool) {\n return _isGaugeFromFactory[gauge];\n }\n\n /**\n * @notice Returns the gauge which sends funds to `recipient`.\n */\n function getRecipientGauge(address recipient) external view override returns (ILiquidityGauge) {\n return ILiquidityGauge(_recipientGauge[recipient]);\n }\n\n /**\n * @notice Returns the recipient of `gauge`.\n */\n function getGaugeRecipient(address gauge) external view override returns (address) {\n return ISingleRecipientGauge(gauge).getRecipient();\n }\n\n /**\n * @notice Deploys a new gauge which bridges all of its BAL allowance to a single recipient on Polygon.\n * @dev Care must be taken to ensure that gauges deployed from this factory are\n * suitable before they are added to the GaugeController.\n * @param recipient The address to receive BAL minted from the gauge\n * @return The address of the deployed gauge\n */\n function create(address recipient) external override returns (address) {\n require(_recipientGauge[recipient] == address(0), \"Gauge already exists\");\n\n address gauge = Clones.clone(address(_gaugeImplementation));\n\n ISingleRecipientGauge(gauge).initialize(recipient);\n\n _isGaugeFromFactory[gauge] = true;\n _recipientGauge[recipient] = gauge;\n emit PolygonRootGaugeCreated(gauge, recipient);\n\n return gauge;\n }\n}\n" + }, + "contracts/gauges/polygon/PolygonRootGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\";\n\nimport \"../StakelessGauge.sol\";\n\ninterface IPolygonRootChainManager {\n function depositFor(\n address user,\n IERC20 token,\n bytes calldata depositData\n ) external;\n}\n\ncontract PolygonRootGauge is ISingleRecipientGauge, StakelessGauge {\n IPolygonRootChainManager private immutable _polygonRootChainManager;\n address private immutable _polygonERC20Predicate;\n\n // This value is kept in storage and not made immutable to allow for this contract to be proxyable\n address private _recipient;\n\n constructor(\n IBalancerMinter minter,\n IPolygonRootChainManager polygonRootChainManager,\n address polygonERC20Predicate\n ) StakelessGauge(minter) {\n _polygonRootChainManager = polygonRootChainManager;\n _polygonERC20Predicate = polygonERC20Predicate;\n }\n\n function initialize(address recipient) external override {\n // This will revert in all calls except the first one\n __StakelessGauge_init();\n\n _recipient = recipient;\n }\n\n function getRecipient() external view override returns (address) {\n return _recipient;\n }\n\n function getPolygonBridge() external view returns (IPolygonRootChainManager) {\n return _polygonRootChainManager;\n }\n\n function getPolygonERC20Predicate() external view returns (address) {\n return _polygonERC20Predicate;\n }\n\n function _postMintAction(uint256 mintAmount) internal override {\n // Token needs to be approved on the predicate NOT the main bridge contract\n _balToken.approve(_polygonERC20Predicate, mintAmount);\n\n // This will transfer BAL to `_recipient` on the Polygon chain\n _polygonRootChainManager.depositFor(_recipient, _balToken, abi.encode(mintAmount));\n }\n}\n" + }, + "contracts/admin/GaugeAdder.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\";\n\ncontract GaugeAdder is IGaugeAdder, SingletonAuthentication, ReentrancyGuard {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n IGaugeController private immutable _gaugeController;\n IAuthorizerAdaptor private _authorizerAdaptor;\n\n // Mapping from gauge type to a list of address for approved factories for that type\n mapping(GaugeType => EnumerableSet.AddressSet) internal _gaugeFactoriesByType;\n // Mapping from mainnet BPT addresses to canonical liquidity gauge as listed on the GaugeController\n mapping(IERC20 => ILiquidityGauge) internal _poolGauge;\n\n constructor(IGaugeController gaugeController) SingletonAuthentication(gaugeController.admin().getVault()) {\n _gaugeController = gaugeController;\n _authorizerAdaptor = gaugeController.admin();\n }\n\n /**\n * @notice Returns the address of the Authorizer adaptor contract.\n */\n function getAuthorizerAdaptor() external view returns (IAuthorizerAdaptor) {\n return _authorizerAdaptor;\n }\n\n /**\n * @notice Returns the address of the Gauge Controller\n */\n function getGaugeController() external view override returns (IGaugeController) {\n return _gaugeController;\n }\n\n /**\n * @notice Returns the gauge corresponding to a Balancer pool `pool` on Ethereum mainnet.\n * Only returns gauges which have been added to the Gauge Controller.\n * @dev Gauge Factories also implement a `getPoolGauge` function which maps pools to gauges which it has deployed.\n * This function provides global information by using which gauge has been added to the Gauge Controller\n * to represent the canonical gauge for a given pool address.\n */\n function getPoolGauge(IERC20 pool) external view override returns (ILiquidityGauge) {\n return _poolGauge[pool];\n }\n\n /**\n * @notice Returns the `index`'th factory for gauge type `gaugeType`\n */\n function getFactoryForGaugeType(GaugeType gaugeType, uint256 index) external view override returns (address) {\n return _gaugeFactoriesByType[gaugeType].at(index);\n }\n\n /**\n * @notice Returns the number of factories for gauge type `gaugeType`\n */\n function getFactoryForGaugeTypeCount(GaugeType gaugeType) external view override returns (uint256) {\n return _gaugeFactoriesByType[gaugeType].length();\n }\n\n /**\n * @notice Returns whether `gauge` has been deployed by one of the listed factories for the gauge type `gaugeType`\n */\n function isGaugeFromValidFactory(address gauge, GaugeType gaugeType) public view override returns (bool) {\n EnumerableSet.AddressSet storage gaugeFactories = _gaugeFactoriesByType[gaugeType];\n uint256 gaugeFactoriesLength = gaugeFactories.length();\n\n // This potentially unbounded loop isn't an issue as the GaugeAdder may be redeployed\n // without affecting the rest of the system.\n for (uint256 i; i < gaugeFactoriesLength; ++i) {\n if (ILiquidityGaugeFactory(gaugeFactories.unchecked_at(i)).isGaugeFromFactory(gauge)) {\n return true;\n }\n }\n\n return false;\n }\n\n // Admin Functions\n\n // Functions for the \"LiquidityMiningCommittee\" and \"veBAL\" types are purposefully omitted as there is\n // no reason for new gauges to be deployed for these types so there is no need to expose methods to add them.\n\n /**\n * @notice Adds a new gauge to the GaugeController for the \"Ethereum\" type.\n */\n function addEthereumGauge(IStakingLiquidityGauge gauge) external override authenticate {\n // Each gauge factory prevents deploying multiple gauges for the same Balancer pool\n // however two separate factories can each deploy their own gauge for the same pool.\n // We then check here to see if the new gauge's pool already has a gauge on the Gauge Controller\n IERC20 pool = gauge.lp_token();\n require(_poolGauge[pool] == ILiquidityGauge(0), \"Duplicate gauge\");\n require(pool != _gaugeController.token(), \"Cannot add gauge for 80/20 BAL-WETH BPT\");\n _poolGauge[pool] = gauge;\n\n _addGauge(address(gauge), GaugeType.Ethereum);\n }\n\n /**\n * @notice Adds a new gauge to the GaugeController for the \"Polygon\" type.\n * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n * It should not be called with the address of the gauge which is deployed on Polygon\n */\n function addPolygonGauge(address rootGauge) external override authenticate {\n _addGauge(rootGauge, GaugeType.Polygon);\n }\n\n /**\n * @notice Adds a new gauge to the GaugeController for the \"Arbitrum\" type.\n * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n * It should not be called with the address of the gauge which is deployed on Arbitrum\n */\n function addArbitrumGauge(address rootGauge) external override authenticate {\n _addGauge(rootGauge, GaugeType.Arbitrum);\n }\n\n /**\n * @notice Adds `factory` as an allowlisted factory contract for gauges with type `gaugeType`.\n */\n function addGaugeFactory(ILiquidityGaugeFactory factory, GaugeType gaugeType) external override authenticate {\n // Casting is safe as n_gauge_types return value is >= 0.\n require(uint256(gaugeType) < uint256(_gaugeController.n_gauge_types()), \"Invalid gauge type\");\n\n // Sanity check that calling `isGaugeFromFactory` won't revert\n require(!factory.isGaugeFromFactory(address(0)), \"Invalid factory implementation\");\n\n EnumerableSet.AddressSet storage gaugeFactories = _gaugeFactoriesByType[gaugeType];\n require(gaugeFactories.add(address(factory)), \"Factory already added\");\n\n emit GaugeFactoryAdded(gaugeType, factory);\n }\n\n // Internal functions\n\n /**\n * @dev Adds `gauge` to the GaugeController with type `gaugeType` and an initial weight of zero\n */\n function _addGauge(address gauge, GaugeType gaugeType) private {\n require(isGaugeFromValidFactory(gauge, gaugeType), \"Invalid gauge\");\n\n // `_gaugeController` enforces that duplicate gauges may not be added so we do not need to check here.\n _authorizerAdaptor.performAction(\n address(_gaugeController),\n abi.encodeWithSelector(IGaugeController.add_gauge.selector, gauge, gaugeType)\n );\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"./IAuthorizerAdaptor.sol\";\nimport \"./IGaugeController.sol\";\nimport \"./ILiquidityGauge.sol\";\nimport \"./ILiquidityGaugeFactory.sol\";\nimport \"./IStakingLiquidityGauge.sol\";\n\ninterface IGaugeAdder is IAuthentication {\n enum GaugeType { LiquidityMiningCommittee, veBAL, Ethereum, Polygon, Arbitrum }\n\n event GaugeFactoryAdded(GaugeType indexed gaugeType, ILiquidityGaugeFactory gaugeFactory);\n\n /**\n * @notice Returns the address of the Gauge Controller\n */\n function getGaugeController() external view returns (IGaugeController);\n\n /**\n * @notice Returns the gauge corresponding to a Balancer pool `pool` on Ethereum mainnet.\n * Only returns gauges which have been added to the Gauge Controller.\n * @dev Gauge Factories also implement a `getPoolGauge` function which maps pools to gauges which it has deployed.\n * This function provides global information by using which gauge has been added to the Gauge Controller\n * to represent the canonical gauge for a given pool address.\n */\n function getPoolGauge(IERC20 pool) external view returns (ILiquidityGauge);\n\n /**\n * @notice Returns the `index`'th factory for gauge type `gaugeType`\n */\n function getFactoryForGaugeType(GaugeType gaugeType, uint256 index) external view returns (address);\n\n /**\n * @notice Returns the number of factories for gauge type `gaugeType`\n */\n function getFactoryForGaugeTypeCount(GaugeType gaugeType) external view returns (uint256);\n\n /**\n * @notice Returns whether `gauge` has been deployed by one of the listed factories for the gauge type `gaugeType`\n */\n function isGaugeFromValidFactory(address gauge, GaugeType gaugeType) external view returns (bool);\n\n /**\n * @notice Adds a new gauge to the GaugeController for the \"Ethereum\" type.\n */\n function addEthereumGauge(IStakingLiquidityGauge gauge) external;\n\n /**\n * @notice Adds a new gauge to the GaugeController for the \"Polygon\" type.\n * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n * It should not be called with the address of the gauge which is deployed on Polygon\n */\n function addPolygonGauge(address rootGauge) external;\n\n /**\n * @notice Adds a new gauge to the GaugeController for the \"Arbitrum\" type.\n * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n * It should not be called with the address of the gauge which is deployed on Arbitrum\n */\n function addArbitrumGauge(address rootGauge) external;\n\n /**\n * @notice Adds `factory` as an allowlisted factory contract for gauges with type `gaugeType`.\n */\n function addGaugeFactory(ILiquidityGaugeFactory factory, GaugeType gaugeType) external;\n}\n" + }, + "contracts/SmartWalletChecker.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\";\n\ncontract SmartWalletChecker is ISmartWalletChecker, SingletonAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n event ContractAddressAdded(address contractAddress);\n event ContractAddressRemoved(address contractAddress);\n\n EnumerableSet.AddressSet private _allowlistedAddresses;\n\n constructor(IVault vault, address[] memory initialAllowedAddresses) SingletonAuthentication(vault) {\n uint256 addressesLength = initialAllowedAddresses.length;\n for (uint256 i = 0; i < addressesLength; ++i) {\n _allowlistAddress(initialAllowedAddresses[i]);\n }\n }\n\n function check(address contractAddress) external view override returns (bool) {\n return _allowlistedAddresses.contains(contractAddress);\n }\n\n function getAllowlistedAddress(uint256 index) external view returns (address) {\n return _allowlistedAddresses.at(index);\n }\n\n function getAllowlistedAddressesLength() external view returns (uint256) {\n return _allowlistedAddresses.length();\n }\n\n function allowlistAddress(address contractAddress) external authenticate {\n _allowlistAddress(contractAddress);\n }\n\n function denylistAddress(address contractAddress) external authenticate {\n require(_allowlistedAddresses.remove(contractAddress), \"Address is not allowlisted\");\n emit ContractAddressRemoved(contractAddress);\n }\n\n // Internal functions\n\n function _allowlistAddress(address contractAddress) internal {\n require(_allowlistedAddresses.add(contractAddress), \"Address already allowlisted\");\n emit ContractAddressAdded(contractAddress);\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\ninterface ISmartWalletChecker {\n function check(address contractAddress) external view returns (bool);\n}\n" + }, + "contracts/VotingEscrowDelegationProxy.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\";\n\ncontract VotingEscrowDelegationProxy is SingletonAuthentication {\n IERC20 private immutable _votingEscrow;\n IVeDelegation private _delegation;\n\n event DelegationImplementationUpdated(address indexed newImplementation);\n\n constructor(\n IVault vault,\n IERC20 votingEscrow,\n IVeDelegation delegation\n ) SingletonAuthentication(vault) {\n _votingEscrow = votingEscrow;\n _delegation = delegation;\n }\n\n /**\n * @notice Returns the current delegation implementation contract.\n */\n function getDelegationImplementation() external view returns (IVeDelegation) {\n return _delegation;\n }\n\n /**\n * @notice Returns the Voting Escrow (veBAL) contract.\n */\n function getVotingEscrow() external view returns (IERC20) {\n return _votingEscrow;\n }\n\n /**\n * @notice Get the adjusted veBAL balance from the active boost delegation contract\n * @param user The user to query the adjusted veBAL balance of\n * @return veBAL balance\n */\n function adjustedBalanceOf(address user) external view returns (uint256) {\n return _adjustedBalanceOf(user);\n }\n\n /**\n * @notice Get the adjusted veBAL balance from the active boost delegation contract\n * @param user The user to query the adjusted veBAL balance of\n * @return veBAL balance\n */\n // solhint-disable-next-line func-name-mixedcase\n function adjusted_balance_of(address user) external view returns (uint256) {\n return _adjustedBalanceOf(user);\n }\n\n // Internal functions\n\n function _adjustedBalanceOf(address user) internal view returns (uint256) {\n IVeDelegation implementation = _delegation;\n if (implementation == IVeDelegation(0)) {\n return IERC20(_votingEscrow).balanceOf(user);\n }\n return implementation.adjusted_balance_of(user);\n }\n\n // Admin functions\n\n function setDelegation(IVeDelegation delegation) external authenticate {\n // call `adjusted_balance_of` to make sure it works\n delegation.adjusted_balance_of(msg.sender);\n\n _delegation = delegation;\n emit DelegationImplementationUpdated(address(delegation));\n }\n\n function killDelegation() external authenticate {\n _delegation = IVeDelegation(0);\n emit DelegationImplementationUpdated(address(0));\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase\n\ninterface IVeDelegation {\n // solhint-disable-next-line func-name-mixedcase\n function adjusted_balance_of(address user) external view returns (uint256);\n}\n" + }, + "contracts/gauges/ChildChainLiquidityGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\";\n\ncontract ChildChainLiquidityGaugeFactory is IChildChainLiquidityGaugeFactory {\n // RewardsOnlyGauge expects the claim function selector to be left padded with zeros.\n // We then shift right 28 bytes so that the function selector (top 4 bytes) sits in the lowest 4 bytes.\n bytes32 private constant _CLAIM_SIG = keccak256(\"get_reward()\") >> (28 * 8);\n\n ILiquidityGauge private immutable _gaugeImplementation;\n IChildChainStreamer private immutable _childChainStreamerImplementation;\n\n mapping(address => bool) private _isGaugeFromFactory;\n mapping(address => bool) private _isStreamerFromFactory;\n mapping(address => address) private _poolGauge;\n mapping(address => address) private _gaugeStreamer;\n\n constructor(ILiquidityGauge gauge, IChildChainStreamer childChainStreamer) {\n _gaugeImplementation = gauge;\n _childChainStreamerImplementation = childChainStreamer;\n }\n\n /**\n * @notice Returns the address of the implementation used for gauge deployments.\n */\n function getGaugeImplementation() external view override returns (ILiquidityGauge) {\n return _gaugeImplementation;\n }\n\n /**\n * @notice Returns the address of the implementation used for streamer deployments.\n */\n function getChildChainStreamerImplementation() external view override returns (IChildChainStreamer) {\n return _childChainStreamerImplementation;\n }\n\n /**\n * @notice Returns the address of the gauge belonging to `pool`.\n */\n function getPoolGauge(address pool) public view override returns (ILiquidityGauge) {\n return ILiquidityGauge(_poolGauge[pool]);\n }\n\n /**\n * @notice Returns true if `gauge` was created by this factory.\n */\n function isGaugeFromFactory(address gauge) external view override returns (bool) {\n return _isGaugeFromFactory[gauge];\n }\n\n /**\n * @notice Returns the address of the streamer belonging to `gauge`.\n */\n function getGaugeStreamer(address gauge) public view override returns (address) {\n return _gaugeStreamer[gauge];\n }\n\n /**\n * @notice Returns true if `streamer` was created by this factory.\n */\n function isStreamerFromFactory(address streamer) external view override returns (bool) {\n return _isStreamerFromFactory[streamer];\n }\n\n /**\n * @notice Returns the address of the pool which `gauge` belongs.\n */\n function getGaugePool(address gauge) external view override returns (IERC20) {\n return IRewardsOnlyGauge(gauge).lp_token();\n }\n\n /**\n * @notice Returns the address of the streamer belonging to `pool`'s gauge.\n */\n function getPoolStreamer(address pool) external view override returns (address) {\n return getGaugeStreamer(address(getPoolGauge(pool)));\n }\n\n /**\n * @notice Deploys a new gauge for a Balancer pool.\n * @dev As anyone can register arbitrary Balancer pools with the Vault,\n * it's impossible to prove onchain that `pool` is a \"valid\" deployment.\n *\n * Care must be taken to ensure that gauges deployed from this factory are\n * suitable before they are added to the GaugeController.\n *\n * This factory disallows deploying multiple gauges for a single pool.\n * @param pool The address of the pool for which to deploy a gauge\n * @return The address of the deployed gauge\n */\n function create(address pool) external override returns (address) {\n require(_poolGauge[pool] == address(0), \"Gauge already exists\");\n\n address gauge = Clones.clone(address(_gaugeImplementation));\n address streamer = Clones.clone(address(_childChainStreamerImplementation));\n\n IChildChainStreamer(streamer).initialize(gauge);\n IRewardsOnlyGauge(gauge).initialize(pool, streamer, _CLAIM_SIG);\n\n _isGaugeFromFactory[gauge] = true;\n _poolGauge[pool] = gauge;\n _gaugeStreamer[gauge] = streamer;\n emit RewardsOnlyGaugeCreated(gauge, pool, streamer);\n\n return gauge;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"./IChildChainStreamer.sol\";\nimport \"./ILiquidityGauge.sol\";\nimport \"./ILiquidityGaugeFactory.sol\";\nimport \"./IRewardsOnlyGauge.sol\";\n\ninterface IChildChainLiquidityGaugeFactory is ILiquidityGaugeFactory {\n event RewardsOnlyGaugeCreated(address indexed gauge, address indexed pool, address streamer);\n\n /**\n * @notice Returns the address of the implementation used for gauge deployments.\n */\n function getGaugeImplementation() external view returns (ILiquidityGauge);\n\n /**\n * @notice Returns the address of the implementation used for streamer deployments.\n */\n function getChildChainStreamerImplementation() external view returns (IChildChainStreamer);\n\n /**\n * @notice Returns the address of the gauge belonging to `pool`.\n */\n function getPoolGauge(address pool) external view returns (ILiquidityGauge);\n\n /**\n * @notice Returns the address of the streamer belonging to `gauge`.\n */\n function getGaugeStreamer(address gauge) external view returns (address);\n\n /**\n * @notice Returns true if `streamer` was created by this factory.\n */\n function isStreamerFromFactory(address streamer) external view returns (bool);\n\n /**\n * @notice Returns the address of the pool which `gauge` belongs.\n */\n function getGaugePool(address gauge) external view returns (IERC20);\n\n /**\n * @notice Returns the address of the streamer belonging to `pool`'s gauge.\n */\n function getPoolStreamer(address pool) external view returns (address);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase\n\ninterface IChildChainStreamer {\n function initialize(address gauge) external;\n\n function reward_tokens(uint256 index) external view returns (IERC20);\n\n function add_reward(\n IERC20 rewardToken,\n address distributor,\n uint256 duration\n ) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"./IChildChainStreamer.sol\";\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase\n\ninterface IRewardsOnlyGauge {\n function initialize(\n address pool,\n address streamer,\n bytes32 claimSignature\n ) external;\n\n // solhint-disable-next-line func-name-mixedcase\n function lp_token() external view returns (IERC20);\n\n function reward_contract() external view returns (IChildChainStreamer);\n\n function set_rewards(\n address childChainStreamer,\n bytes32 claimSig,\n address[8] calldata rewardTokens\n ) external;\n}\n" + }, + "contracts/gauges/arbitrum/ArbitrumRootGauge.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\";\n\nimport \"../StakelessGauge.sol\";\nimport \"./IGatewayRouter.sol\";\nimport \"./IArbitrumFeeProvider.sol\";\n\ncontract ArbitrumRootGauge is ISingleRecipientGauge, StakelessGauge {\n address private immutable _gateway;\n IGatewayRouter private immutable _gatewayRouter;\n IArbitrumFeeProvider private immutable _factory;\n\n address private _recipient;\n\n constructor(IBalancerMinter minter, IGatewayRouter gatewayRouter) StakelessGauge(minter) {\n _gateway = gatewayRouter.getGateway(address(minter.getBalancerToken()));\n _gatewayRouter = gatewayRouter;\n _factory = IArbitrumFeeProvider(msg.sender);\n }\n\n function initialize(address recipient) external override {\n // This will revert in all calls except the first one\n __StakelessGauge_init();\n\n _recipient = recipient;\n }\n\n function getRecipient() external view override returns (address) {\n return _recipient;\n }\n\n function _postMintAction(uint256 mintAmount) internal override {\n // Token needs to be approved on the gateway NOT the gateway router\n _balToken.approve(_gateway, mintAmount);\n\n (uint256 gasLimit, uint256 gasPrice, uint256 maxSubmissionCost) = _factory.getArbitrumFees();\n uint256 totalBridgeCost = _getTotalBridgeCost(gasLimit, gasPrice, maxSubmissionCost);\n require(msg.value == totalBridgeCost, \"Incorrect msg.value passed\");\n\n // After bridging, the BAL should arrive on Arbitrum within 10 minutes. If it\n // does not, the L2 transaction may have failed due to an insufficient amount\n // within `max_submission_cost + (gas_limit * gas_price)`\n // In this case, the transaction can be manually broadcasted on Arbitrum by calling\n // `ArbRetryableTicket(0x000000000000000000000000000000000000006e).redeem(redemption-TxID)`\n // The calldata for this manual transaction is easily obtained by finding the reverted\n // transaction in the tx history for 0x000000000000000000000000000000000000006e on Arbiscan.\n // https://developer.offchainlabs.com/docs/l1_l2_messages#retryable-transaction-lifecycle\n _gatewayRouter.outboundTransfer{ value: totalBridgeCost }(\n _balToken,\n _recipient,\n mintAmount,\n gasLimit,\n gasPrice,\n abi.encode(maxSubmissionCost, \"\")\n );\n }\n\n function getTotalBridgeCost() external view returns (uint256) {\n (uint256 gasLimit, uint256 gasPrice, uint256 maxSubmissionCost) = _factory.getArbitrumFees();\n return _getTotalBridgeCost(gasLimit, gasPrice, maxSubmissionCost);\n }\n\n function _getTotalBridgeCost(\n uint256 gasLimit,\n uint256 gasPrice,\n uint256 maxSubmissionCost\n ) internal pure returns (uint256) {\n return gasLimit * gasPrice + maxSubmissionCost;\n }\n}\n" + }, + "contracts/gauges/arbitrum/IGatewayRouter.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\n\ninterface IGatewayRouter {\n function outboundTransfer(\n IERC20 token,\n address recipient,\n uint256 amount,\n uint256 gasLimit,\n uint256 gasPrice,\n bytes calldata data\n ) external payable;\n\n function getGateway(address token) external view returns (address gateway);\n}\n" + }, + "contracts/gauges/arbitrum/IArbitrumFeeProvider.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\ninterface IArbitrumFeeProvider {\n function getArbitrumFees()\n external\n view\n returns (\n uint256 gasLimit,\n uint256 gasPrice,\n uint256 maxSubmissionCost\n );\n}\n" + }, + "contracts/gauges/arbitrum/ArbitrumRootGaugeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\";\n\nimport \"./ArbitrumRootGauge.sol\";\nimport \"./IArbitrumFeeProvider.sol\";\n\ncontract ArbitrumRootGaugeFactory is ILiquidityGaugeFactory, IArbitrumFeeProvider, SingletonAuthentication {\n ArbitrumRootGauge private _gaugeImplementation;\n\n mapping(address => bool) private _isGaugeFromFactory;\n mapping(address => address) private _recipientGauge;\n\n uint64 private _gasLimit;\n uint64 private _gasPrice;\n uint64 private _maxSubmissionCost;\n\n event ArbitrumRootGaugeCreated(address indexed gauge, address indexed recipient);\n event ArbitrumFeesModified(uint256 gasLimit, uint256 gasPrice, uint256 maxSubmissionCost);\n\n constructor(\n IVault vault,\n IBalancerMinter minter,\n IGatewayRouter gatewayRouter,\n uint64 gasLimit,\n uint64 gasPrice,\n uint64 maxSubmissionCost\n ) SingletonAuthentication(vault) {\n _gaugeImplementation = new ArbitrumRootGauge(minter, gatewayRouter);\n\n _gasLimit = gasLimit;\n _gasPrice = gasPrice;\n _maxSubmissionCost = maxSubmissionCost;\n }\n\n /**\n * @notice Returns the address of the implementation used for gauge deployments.\n */\n function getGaugeImplementation() public view returns (address) {\n return address(_gaugeImplementation);\n }\n\n /**\n * @notice Returns true if `gauge` was created by this factory.\n */\n function isGaugeFromFactory(address gauge) external view override returns (bool) {\n return _isGaugeFromFactory[gauge];\n }\n\n /**\n * @notice Returns the gauge which sends funds to `recipient`.\n */\n function getRecipientGauge(address recipient) external view returns (ILiquidityGauge) {\n return ILiquidityGauge(_recipientGauge[recipient]);\n }\n\n /**\n * @notice Returns the recipient of `gauge`.\n */\n function getGaugeRecipient(address gauge) external view returns (address) {\n return ISingleRecipientGauge(gauge).getRecipient();\n }\n\n /**\n * @notice Set the fees for the Arbitrum side of the bridging transaction\n */\n function getArbitrumFees()\n external\n view\n override\n returns (\n uint256 gasLimit,\n uint256 gasPrice,\n uint256 maxSubmissionCost\n )\n {\n gasLimit = _gasLimit;\n gasPrice = _gasPrice;\n maxSubmissionCost = _maxSubmissionCost;\n }\n\n /**\n * @notice Deploys a new gauge which bridges all of its BAL allowance to a single recipient on Polygon.\n * @dev Care must be taken to ensure that gauges deployed from this factory are\n * suitable before they are added to the GaugeController.\n * @param recipient The address to receive BAL minted from the gauge\n * @return The address of the deployed gauge\n */\n function create(address recipient) external override returns (address) {\n require(_recipientGauge[recipient] == address(0), \"Gauge already exists\");\n\n address gauge = Clones.clone(address(_gaugeImplementation));\n\n ArbitrumRootGauge(gauge).initialize(recipient);\n\n _isGaugeFromFactory[gauge] = true;\n _recipientGauge[recipient] = gauge;\n emit ArbitrumRootGaugeCreated(gauge, recipient);\n\n return gauge;\n }\n\n /**\n * @notice Set the fees for the Arbitrum side of the bridging transaction\n */\n function setArbitrumFees(\n uint64 gasLimit,\n uint64 gasPrice,\n uint64 maxSubmissionCost\n ) external authenticate {\n _gasLimit = gasLimit;\n _gasPrice = gasPrice;\n _maxSubmissionCost = maxSubmissionCost;\n emit ArbitrumFeesModified(gasLimit, gasPrice, maxSubmissionCost);\n }\n}\n" + }, + "contracts/test/MockGaugeController.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\";\n\n// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case\n// naming convention.\n// solhint-disable func-name-mixedcase\n\ncontract MockGaugeController is IGaugeController {\n int128 private _numGaugeTypes;\n mapping(address => bool) private _validGauge;\n mapping(address => int128) private _gaugeType;\n\n IAuthorizerAdaptor public override admin;\n // solhint-disable-next-line var-name-mixedcase\n IVotingEscrow public override voting_escrow;\n\n // solhint-disable-next-line func-param-name-mixedcase, var-name-mixedcase\n event NewGauge(address addr, int128 gauge_type, uint256 weight);\n\n constructor(IVotingEscrow votingEscrow, IAuthorizerAdaptor authorizerAdaptor) {\n voting_escrow = votingEscrow;\n admin = authorizerAdaptor;\n }\n\n function n_gauge_types() external view override returns (int128) {\n return _numGaugeTypes;\n }\n\n function gauge_types(address gauge) external view override returns (int128) {\n require(_validGauge[gauge], \"Gauge doesn't exist on controller\");\n return _gaugeType[gauge];\n }\n\n function add_gauge(address gauge, int128 gaugeType) external override {\n require(!_validGauge[gauge], \"Gauge already exists on controller\");\n require(gaugeType >= 0 && gaugeType < _numGaugeTypes, \"Invalid gauge type\");\n _validGauge[gauge] = true;\n emit NewGauge(gauge, gaugeType, 0);\n }\n\n function add_type(string calldata, uint256) external override {\n _numGaugeTypes += 1;\n }\n\n function token() external pure override returns (IERC20) {\n return IERC20(0);\n }\n\n function checkpoint_gauge(address) external override {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function gauge_relative_weight(address, uint256) external view override returns (uint256) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function change_type_weight(int128, uint256) external override {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/helpers/IAuthentication.sol\";\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\nimport \"../liquidity-mining/IBalancerToken.sol\";\n\ninterface IBALTokenHolder is IAuthentication {\n function getBalancerToken() external view returns (IBalancerToken);\n\n function getName() external view returns (string memory);\n\n function withdrawFunds(address recipient, uint256 amount) external;\n\n function sweepTokens(\n IERC20 token,\n address recipient,\n uint256 amount\n ) external;\n}\n" + }, + "contracts/fee-distribution/FeeDistributorBALClaimer.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol\";\n\n/**\n * @title FeeDistributorBALClaimer\n * @notice Atomically mints any outstanding BAL from a SingleRecipientGauge and transfers it to the FeeDistributor\n * in order for it to be distributed among veBAL holders.\n */\ncontract FeeDistributorBALClaimer {\n IERC20 private immutable _balToken;\n IAuthorizerAdaptor private immutable _authorizerAdaptor;\n IFeeDistributor private immutable _feeDistributor;\n ISingleRecipientGauge private immutable _gauge;\n IBALTokenHolder private immutable _balTokenHolder;\n\n constructor(\n IFeeDistributor feeDistributor,\n ISingleRecipientGauge gauge,\n IAuthorizerAdaptor authorizerAdaptor\n ) {\n IBALTokenHolder balTokenHolder = IBALTokenHolder(gauge.getRecipient());\n\n _balToken = balTokenHolder.getBalancerToken();\n _authorizerAdaptor = authorizerAdaptor;\n _feeDistributor = feeDistributor;\n _gauge = gauge;\n _balTokenHolder = balTokenHolder;\n }\n\n /**\n * @notice Returns the address of the Balancer token contract.\n */\n function getBalancerToken() external view returns (IERC20) {\n return _balToken;\n }\n\n /**\n * @notice Returns the address of the AuthorizerAdaptor contract.\n */\n function getAuthorizerAdaptor() external view returns (IAuthorizerAdaptor) {\n return _authorizerAdaptor;\n }\n\n /**\n * @notice Returns the address of the FeeDistributor contract.\n */\n function getFeeDistributor() external view returns (IFeeDistributor) {\n return _feeDistributor;\n }\n\n /**\n * @notice Returns the address of the associated SingleRecipientGauge contract.\n */\n function getGauge() external view returns (ISingleRecipientGauge) {\n return _gauge;\n }\n\n /**\n * @notice Returns the address of the associated BALTokenHolder contract.\n */\n function getBALTokenHolder() external view returns (IBALTokenHolder) {\n return _balTokenHolder;\n }\n\n /**\n * @notice Mint any outstanding BAL emissions and send them to the FeeDistributor\n * @dev In order to call this function the `FeeDistributorBALClaimer` must be authorized to:\n * - Withdraw BAL from the linked BALTokenHolder\n * - Checkpoint the associated SingleRecipientGauge in order to mint BAL.\n */\n function distributeBAL() external {\n _checkpointGauge(_gauge);\n\n // We checkpoint before and after depositing tokens to ensure that the BAL is assigned to the correct week.\n _feeDistributor.checkpointToken(_balToken);\n _balTokenHolder.withdrawFunds(address(_feeDistributor), _balToken.balanceOf(address(_balTokenHolder)));\n _feeDistributor.checkpointToken(_balToken);\n }\n\n function _checkpointGauge(IStakelessGauge gauge) private {\n _authorizerAdaptor.performAction(address(gauge), abi.encodeWithSelector(IStakelessGauge.checkpoint.selector));\n }\n}\n" + }, + "contracts/admin/ChildChainGaugeTokenAdder.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\";\n\n/**\n * @title ChildChainGaugeTokenAdder\n * @notice Allows atomically adding a new reward token to a RewardsOnlyGauge while ensuring that it remains in sync\n * with its ChildChainStreamer.\n */\ncontract ChildChainGaugeTokenAdder is SingletonAuthentication {\n // RewardsOnlyGauge expects the claim function selector to be left padded with zeros.\n // We then shift right 28 bytes so that the function selector (top 4 bytes) sits in the lowest 4 bytes.\n bytes32 private constant _CLAIM_SIG = keccak256(\"get_reward()\") >> (28 * 8);\n uint256 private constant _MAX_TOKENS = 8;\n uint256 private constant _REWARD_DURATION = 1 weeks;\n\n IAuthorizerAdaptor private immutable _authorizerAdaptor;\n IChildChainLiquidityGaugeFactory private immutable _gaugeFactory;\n\n constructor(IChildChainLiquidityGaugeFactory gaugeFactory, IAuthorizerAdaptor authorizerAdaptor)\n SingletonAuthentication(authorizerAdaptor.getVault())\n {\n _authorizerAdaptor = authorizerAdaptor;\n _gaugeFactory = gaugeFactory;\n }\n\n /**\n * @notice Returns the address of the Authorizer adaptor contract.\n */\n function getAuthorizerAdaptor() external view returns (IAuthorizerAdaptor) {\n return _authorizerAdaptor;\n }\n\n /**\n * @notice Adds a new token to a RewardsOnlyGauge.\n */\n function addTokenToGauge(\n IRewardsOnlyGauge gauge,\n IERC20 rewardToken,\n address distributor\n ) external authenticate {\n require(_gaugeFactory.isGaugeFromFactory(address(gauge)), \"Invalid gauge\");\n IChildChainStreamer streamer = IChildChainStreamer(_gaugeFactory.getGaugeStreamer(address(gauge)));\n require(streamer == gauge.reward_contract(), \"Not original gauge streamer\");\n\n // We first add the new token to the streamer so that the gauge can claim it when checkpointing.\n _addTokenToStreamer(streamer, rewardToken, distributor);\n\n // We must pass the full list of tokens which the gauge should claim from the streamer when adding a new token.\n // We then query this from the streamer to ensure that the reward tokens on each contract are consistent.\n // As we have added the new reward token to the streamer already, this array will include it.\n IERC20[_MAX_TOKENS] memory rewardTokens;\n for (uint256 i; i < _MAX_TOKENS; ++i) {\n rewardTokens[i] = streamer.reward_tokens(i);\n }\n\n // We now let the gauge know to claim the new token.\n _updateGaugeRewardTokens(gauge, streamer, rewardTokens);\n }\n\n function _addTokenToStreamer(\n IChildChainStreamer streamer,\n IERC20 rewardToken,\n address distributor\n ) private {\n _authorizerAdaptor.performAction(\n address(streamer),\n abi.encodeWithSelector(IChildChainStreamer.add_reward.selector, rewardToken, distributor, _REWARD_DURATION)\n );\n }\n\n function _updateGaugeRewardTokens(\n IRewardsOnlyGauge gauge,\n IChildChainStreamer streamer,\n IERC20[_MAX_TOKENS] memory rewardTokens\n ) private {\n _authorizerAdaptor.performAction(\n address(gauge),\n abi.encodeWithSelector(IRewardsOnlyGauge.set_rewards.selector, streamer, _CLAIM_SIG, rewardTokens)\n );\n }\n}\n" + }, + "contracts/admin/DistributionScheduler.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\";\n\n// solhint-disable not-rely-on-time\n\n/**\n * @title DistributionScheduler\n * @notice Scheduler for setting up permissionless distributions of liquidity gauge reward tokens.\n * @dev Any address may send tokens to the DistributionSchedule to be distributed among gauge depositors.\n */\ncontract DistributionScheduler {\n using SafeERC20 for IERC20;\n\n uint256 private constant _MAX_REWARDS = 8;\n\n // The node at _HEAD contains no value, and simply points to the actual first node. The last node points to _NULL.\n uint32 private constant _HEAD = 0;\n uint32 private constant _NULL = 0;\n\n // gauge-token pair -> timestamp -> (amount, nextTimestamp)\n mapping(bytes32 => mapping(uint32 => RewardNode)) private _rewardsLists;\n\n struct RewardNode {\n uint224 amount;\n uint32 nextTimestamp;\n }\n\n /**\n * @notice Returns information on the reward paid out to `gauge` in `token` over the week starting at `timestamp`\n * @param gauge - The gauge which is to distribute the reward token.\n * @param token - The token which is to be distributed among gauge depositors.\n * @param timestamp - The timestamp corresponding to the beginning of the week being queried.\n * @return - the amount of `token` which is to be distributed over the week starting at `timestamp`.\n * - the timestamp of the next scheduled distribution of `token` to `gauge`. Zero if no distribution exists.\n */\n function getRewardNode(\n IRewardTokenDistributor gauge,\n IERC20 token,\n uint256 timestamp\n ) external view returns (RewardNode memory) {\n return _rewardsLists[_getRewardsListId(gauge, token)][uint32(timestamp)];\n }\n\n /**\n * @notice Returns the amount of `token` which is ready to be distributed by `gauge` as of the current timestamp.\n * @param gauge - The gauge which is to distribute the reward token.\n * @param token - The token which is to be distributed among gauge depositors.\n */\n function getPendingRewards(IRewardTokenDistributor gauge, IERC20 token) public view returns (uint256) {\n return getPendingRewardsAt(gauge, token, block.timestamp);\n }\n\n /**\n * @notice Returns the amount of `token` which is ready to be distributed by `gauge` as of a specified timestamp.\n * @param gauge - The gauge which is to distribute the reward token.\n * @param token - The token which is to be distributed among gauge depositors.\n * @param timestamp - The future timestamp in which to query.\n */\n function getPendingRewardsAt(\n IRewardTokenDistributor gauge,\n IERC20 token,\n uint256 timestamp\n ) public view returns (uint256) {\n mapping(uint32 => RewardNode) storage rewardsList = _rewardsLists[_getRewardsListId(gauge, token)];\n\n (, uint256 amount) = _getPendingRewards(rewardsList, timestamp);\n return amount;\n }\n\n /**\n * @notice Schedule a distribution of tokens to gauge depositors over the span of 1 week.\n * @dev All distributions must start at the beginning of a week in UNIX time, i.e. Thurs 00:00 UTC.\n * This is to prevent griefing from many low value distributions having to be processed before a meaningful\n * distribution can be processed.\n * @param gauge - The gauge which is to distribute the reward token.\n * @param token - The token which is to be distributed among gauge depositors.\n * @param amount - The amount of tokens which to distribute.\n * @param startTime - The timestamp at the beginning of the week over which to distribute tokens.\n */\n function scheduleDistribution(\n IRewardTokenDistributor gauge,\n IERC20 token,\n uint256 amount,\n uint256 startTime\n ) external {\n require(amount > 0, \"Must provide non-zero number of tokens\");\n\n // Ensure that values won't overflow when put into storage.\n require(amount <= type(uint224).max, \"Reward amount overflow\");\n require(startTime <= type(uint32).max, \"Reward timestamp overflow\");\n\n // Ensure that a user doesn't add a reward token which becomes locked on scheduler\n address rewardDistributor = gauge.reward_data(token).distributor;\n require(rewardDistributor != address(0), \"Reward token does not exist on gauge\");\n require(rewardDistributor == address(this), \"DistributionScheduler is not reward token's distributor\");\n\n // Prevent griefing by creating many small distributions which must be processed.\n require(startTime >= block.timestamp, \"Distribution can only be scheduled for the future\");\n require(startTime == _roundDownTimestamp(startTime), \"Distribution must start at the beginning of the week\");\n\n token.safeTransferFrom(msg.sender, address(this), amount);\n\n _insertReward(_rewardsLists[_getRewardsListId(gauge, token)], uint32(startTime), uint224(amount));\n }\n\n /**\n * @notice Process all pending distributions for a gauge to start distributing the tokens.\n * @param gauge - The gauge which is to distribute the reward token.\n */\n function startDistributions(IRewardTokenDistributor gauge) external {\n for (uint256 i = 0; i < _MAX_REWARDS; ++i) {\n IERC20 token = gauge.reward_tokens(i);\n if (token == IERC20(0)) break;\n\n // Only attempt to start distributions for tokens which we are the distributor for\n address rewardDistributor = gauge.reward_data(token).distributor;\n if (rewardDistributor == address(this)) {\n startDistributionForToken(gauge, token);\n }\n }\n }\n\n /**\n * @notice Process all pending distributions for a given token for a gauge to start distributing tokens.\n * @param gauge - The gauge which is to distribute the reward token.\n * @param token - The token which is to be distributed among gauge depositors.\n */\n function startDistributionForToken(IRewardTokenDistributor gauge, IERC20 token) public {\n mapping(uint32 => RewardNode) storage rewardsList = _rewardsLists[_getRewardsListId(gauge, token)];\n\n (uint32 firstUnprocessedNodeKey, uint256 rewardAmount) = _getPendingRewards(rewardsList, block.timestamp);\n\n // These calls are reentrancy-safe as we've already performed our only state transition (updating the head of\n // the list)\n rewardsList[_HEAD].nextTimestamp = firstUnprocessedNodeKey;\n\n token.approve(address(gauge), rewardAmount);\n gauge.deposit_reward_token(token, rewardAmount);\n }\n\n // Internal functions\n\n function _getRewardsListId(IRewardTokenDistributor gauge, IERC20 rewardToken) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(gauge, rewardToken));\n }\n\n /**\n * @dev Sums the rewards held on all pending reward nodes with a key lesser than `targetKey`.\n * @return - the key corresponding to the first node with a key greater than `targetKey`.\n * - the cumulative rewards held on all pending nodes before `targetKey`\n */\n function _getPendingRewards(mapping(uint32 => RewardNode) storage rewardsList, uint256 targetKey)\n internal\n view\n returns (uint32, uint256)\n {\n uint32 currentNodeKey = rewardsList[_HEAD].nextTimestamp;\n\n // Iterate through all nodes which are ready to be started, summing the values of each.\n uint256 amount;\n while (targetKey >= currentNodeKey && currentNodeKey != _NULL) {\n amount += rewardsList[currentNodeKey].amount;\n\n currentNodeKey = rewardsList[currentNodeKey].nextTimestamp;\n }\n\n return (currentNodeKey, amount);\n }\n\n /**\n * @dev Find the position of the new node in the list of pending nodes and insert it.\n */\n function _insertReward(\n mapping(uint32 => RewardNode) storage rewardsList,\n uint32 insertedNodeKey,\n uint224 amount\n ) private {\n // We want to find two nodes which sit either side of the new node to be created so we can insert between them.\n\n uint32 currentNodeKey = _HEAD;\n uint32 nextNodeKey = rewardsList[currentNodeKey].nextTimestamp;\n\n // Search through nodes until the new node sits somewhere between `currentNodeKey` and `nextNodeKey`, or\n // we process all nodes.\n while (insertedNodeKey > nextNodeKey && nextNodeKey != _NULL) {\n currentNodeKey = nextNodeKey;\n nextNodeKey = rewardsList[currentNodeKey].nextTimestamp;\n }\n\n if (nextNodeKey == _NULL) {\n // We reached the end of the list and so can just append the new node.\n rewardsList[currentNodeKey].nextTimestamp = insertedNodeKey;\n rewardsList[insertedNodeKey] = RewardNode(amount, _NULL);\n } else if (nextNodeKey == insertedNodeKey) {\n // There already exists a node at the time we want to insert one.\n // We then just increase the value of this node.\n\n uint256 rewardAmount = uint256(rewardsList[nextNodeKey].amount) + amount;\n require(rewardAmount <= type(uint224).max, \"Reward amount overflow\");\n rewardsList[nextNodeKey].amount = uint224(rewardAmount);\n } else {\n // We're inserting a node in between `currentNodeKey` and `nextNodeKey` so then update\n // `currentNodeKey` to point to the newly inserted node and the new node to point to `nextNodeKey`.\n rewardsList[insertedNodeKey] = RewardNode(amount, nextNodeKey);\n rewardsList[currentNodeKey].nextTimestamp = insertedNodeKey;\n }\n }\n\n /**\n * @dev Rounds the provided timestamp down to the beginning of the previous week (Thurs 00:00 UTC)\n */\n function _roundDownTimestamp(uint256 timestamp) private pure returns (uint256) {\n return (timestamp / 1 weeks) * 1 weeks;\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 9999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "output": { + "contracts": { + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol": { + "IAuthorizerAdaptor": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "performAction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getVault()": "8d928af8", + "performAction(address,bytes)": "4036176a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"performAction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"performAction(address,bytes)\":{\"params\":{\"data\":\"- Calldata to be sent to the target contract\",\"target\":\"- Address of the contract to be called\"},\"returns\":{\"_0\":\"The bytes encoded return value from the performed function call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"},\"performAction(address,bytes)\":{\"notice\":\"Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":\"IAuthorizerAdaptor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol": { + "IBalancerMinter": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "minted", + "type": "uint256" + } + ], + "name": "Minted", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "allowed_to_mint_for", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerTokenAdmin", + "outputs": [ + { + "internalType": "contract IBalancerTokenAdmin", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeController", + "outputs": [ + { + "internalType": "contract IGaugeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getMinterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "mintFor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "gauges", + "type": "address[]" + } + ], + "name": "mintMany", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "gauges", + "type": "address[]" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "mintManyFor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "mint_for", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[8]", + "name": "gauges", + "type": "address[8]" + } + ], + "name": "mint_many", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "minted", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "setMinterApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "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": "setMinterApprovalWithSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "toggle_approve_mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allowed_to_mint_for(address,address)": "a0990033", + "getBalancerToken()": "c0039699", + "getBalancerTokenAdmin()": "e6dec36f", + "getGaugeController()": "58de9ade", + "getMinterApproval(address,address)": "3c543bc6", + "mint(address)": "6a627842", + "mintFor(address,address)": "7504a15d", + "mintMany(address[])": "397ada21", + "mintManyFor(address[],address)": "3b9f7384", + "mint_for(address,address)": "27f18ae3", + "mint_many(address[8])": "a51e1904", + "minted(address,address)": "8b752bb0", + "setMinterApproval(address,bool)": "0de54ba0", + "setMinterApprovalWithSignature(address,bool,address,uint256,uint8,bytes32,bytes32)": "c6542794", + "toggle_approve_mint(address)": "dd289d60" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minted\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"allowed_to_mint_for\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerTokenAdmin\",\"outputs\":[{\"internalType\":\"contract IBalancerTokenAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeController\",\"outputs\":[{\"internalType\":\"contract IGaugeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getMinterApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"mintFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"gauges\",\"type\":\"address[]\"}],\"name\":\"mintMany\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"gauges\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"mintManyFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"mint_for\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[8]\",\"name\":\"gauges\",\"type\":\"address[8]\"}],\"name\":\"mint_many\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"minted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approval\",\"type\":\"bool\"}],\"name\":\"setMinterApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approval\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"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\":\"setMinterApprovalWithSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"toggle_approve_mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"mint(address)\":{\"params\":{\"gauge\":\"`LiquidityGauge` address to get mintable amount from\"}},\"mintFor(address,address)\":{\"details\":\"Only possible when `msg.sender` has been approved by `user` to mint on their behalf\",\"params\":{\"gauge\":\"`LiquidityGauge` address to get mintable amount from\",\"user\":\"Address to mint to\"}},\"mintMany(address[])\":{\"params\":{\"gauges\":\"List of `LiquidityGauge` addresses\"}},\"mintManyFor(address[],address)\":{\"details\":\"Only possible when `msg.sender` has been approved by `user` to mint on their behalf\",\"params\":{\"gauges\":\"List of `LiquidityGauge` addresses\",\"user\":\"Address to mint to\"}},\"mint_for(address,address)\":{\"details\":\"Only possible when `msg.sender` has been approved by `user` to mint on their behalf\",\"params\":{\"gauge\":\"`LiquidityGauge` address to get mintable amount from\",\"user\":\"Address to mint to\"}},\"mint_many(address[8])\":{\"details\":\"This function is not recommended as `mintMany()` is more flexible and gas efficient\",\"params\":{\"gauges\":\"List of `LiquidityGauge` addresses\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowed_to_mint_for(address,address)\":{\"notice\":\"Whether `minter` is approved to mint tokens for `user`\"},\"getBalancerToken()\":{\"notice\":\"Returns the address of the Balancer Governance Token\"},\"getBalancerTokenAdmin()\":{\"notice\":\"Returns the address of the Balancer Token Admin contract\"},\"getGaugeController()\":{\"notice\":\"Returns the address of the Gauge Controller\"},\"getMinterApproval(address,address)\":{\"notice\":\"Whether `minter` is approved to mint tokens for `user`\"},\"mint(address)\":{\"notice\":\"Mint everything which belongs to `msg.sender` and send to them\"},\"mintFor(address,address)\":{\"notice\":\"Mint tokens for `user`\"},\"mintMany(address[])\":{\"notice\":\"Mint everything which belongs to `msg.sender` across multiple gauges\"},\"mintManyFor(address[],address)\":{\"notice\":\"Mint tokens for `user` across multiple gauges\"},\"mint_for(address,address)\":{\"notice\":\"Mint tokens for `user`\"},\"mint_many(address[8])\":{\"notice\":\"Mint everything which belongs to `msg.sender` across multiple gauges\"},\"minted(address,address)\":{\"notice\":\"The total number of tokens minted for `user` from `gauge`\"},\"setMinterApproval(address,bool)\":{\"notice\":\"Set whether `minter` is approved to mint tokens on your behalf\"},\"setMinterApprovalWithSignature(address,bool,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing them.\"},\"toggle_approve_mint(address)\":{\"notice\":\"Toggle whether `minter` is approved to mint tokens for `user`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":\"IBalancerMinter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol": { + "IBalancerToken": { + "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": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SNAPSHOT_ROLE", + "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": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "snapshot", + "outputs": [], + "stateMutability": "nonpayable", + "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": [ + { + "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" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DEFAULT_ADMIN_ROLE()": "a217fddf", + "MINTER_ROLE()": "d5391393", + "SNAPSHOT_ROLE()": "7028e2cd", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "getRoleAdmin(bytes32)": "248a9ca3", + "getRoleMember(bytes32,uint256)": "9010d07c", + "getRoleMemberCount(bytes32)": "ca15c873", + "grantRole(bytes32,address)": "2f2ff15d", + "hasRole(bytes32,address)": "91d14854", + "mint(address,uint256)": "40c10f19", + "revokeRole(bytes32,address)": "d547741f", + "snapshot()": "9711715a", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SNAPSHOT_ROLE\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"snapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[{\"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\":{\"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 `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\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":\"IBalancerToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol": { + "IBalancerTokenAdmin": { + "abi": [ + { + "inputs": [], + "name": "INITIAL_RATE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RATE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RATE_REDUCTION_COEFFICIENT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RATE_REDUCTION_TIME", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerToken", + "outputs": [ + { + "internalType": "contract IBalancerToken", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "startEpochTimeWrite", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "INITIAL_RATE()": "4dbac733", + "RATE_DENOMINATOR()": "7efad8e0", + "RATE_REDUCTION_COEFFICIENT()": "21609bbf", + "RATE_REDUCTION_TIME()": "b87b5616", + "activate()": "0f15f4c0", + "getActionId(bytes4)": "851c1bb3", + "getBalancerToken()": "c0039699", + "mint(address,uint256)": "40c10f19", + "rate()": "2c4e722e", + "startEpochTimeWrite()": "a228bced" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"INITIAL_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RATE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RATE_REDUCTION_COEFFICIENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RATE_REDUCTION_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerToken\",\"outputs\":[{\"internalType\":\"contract IBalancerToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startEpochTimeWrite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getBalancerToken()\":{\"notice\":\"Returns the address of the Balancer Governance Token\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":\"IBalancerTokenAdmin\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol": { + "IChildChainLiquidityGaugeFactory": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "streamer", + "type": "address" + } + ], + "name": "RewardsOnlyGaugeCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getChildChainStreamerImplementation", + "outputs": [ + { + "internalType": "contract IChildChainStreamer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeImplementation", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugePool", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugeStreamer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolStreamer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "streamer", + "type": "address" + } + ], + "name": "isStreamerFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getChildChainStreamerImplementation()": "f9e0a13e", + "getGaugeImplementation()": "39312dee", + "getGaugePool(address)": "744a65dd", + "getGaugeStreamer(address)": "90b20087", + "getPoolGauge(address)": "a8ea6875", + "getPoolStreamer(address)": "8a4ffeb0", + "isGaugeFromFactory(address)": "ce3cc8bd", + "isStreamerFromFactory(address)": "cbda9327" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"streamer\",\"type\":\"address\"}],\"name\":\"RewardsOnlyGaugeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChildChainStreamerImplementation\",\"outputs\":[{\"internalType\":\"contract IChildChainStreamer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeImplementation\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugePool\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugeStreamer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolStreamer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"streamer\",\"type\":\"address\"}],\"name\":\"isStreamerFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getChildChainStreamerImplementation()\":{\"notice\":\"Returns the address of the implementation used for streamer deployments.\"},\"getGaugeImplementation()\":{\"notice\":\"Returns the address of the implementation used for gauge deployments.\"},\"getGaugePool(address)\":{\"notice\":\"Returns the address of the pool which `gauge` belongs.\"},\"getGaugeStreamer(address)\":{\"notice\":\"Returns the address of the streamer belonging to `gauge`.\"},\"getPoolGauge(address)\":{\"notice\":\"Returns the address of the gauge belonging to `pool`.\"},\"getPoolStreamer(address)\":{\"notice\":\"Returns the address of the streamer belonging to `pool`'s gauge.\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"},\"isStreamerFromFactory(address)\":{\"notice\":\"Returns true if `streamer` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol\":\"IChildChainLiquidityGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol\":{\"keccak256\":\"0xe551b5fd237d7c07b4f767b8bd6c58442efa401dfb78b58923b2f3c2cf772e13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83d69bd6f54f255076db95c260acc7b5bab6df94cf8ae8bf0097e43ca6a8f085\",\"dweb:/ipfs/QmcxcN5ydnGGpBg6uKG723AXWJK8XeXQoDHYEHtD1AkP9J\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol\":{\"keccak256\":\"0xf5a92d4719022a69fde49af957fd21716bce7bcabb1f7acefd7a39eb0127f442\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdb77139e0ed80197ee132c0d7bf4a94834103ba4e3f08db44419f14df5522f9\",\"dweb:/ipfs/QmXHXjaKBifMCuetXojcVjNVLyVHSnfjvwzHBqGL6cXeEc\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol\":{\"keccak256\":\"0xc6b2e51a60e61ad332aa023a7228a67647fad18fd55358f73a3f86f09ec4ef3e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://82c4bb28284b68f05c0364a405cdfe46d62b0e91cc61c2208b47401d7a577528\",\"dweb:/ipfs/QmYGkdmLoLA86gzyYnowMgj6qwhzmBzDnz4nQWUs7U669A\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol": { + "IChildChainStreamer": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "add_reward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "reward_tokens", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "add_reward(address,address,uint256)": "661ab0b2", + "initialize(address)": "c4d66de8", + "reward_tokens(uint256)": "54c49fe9" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"add_reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"reward_tokens\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol\":\"IChildChainStreamer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol\":{\"keccak256\":\"0xf5a92d4719022a69fde49af957fd21716bce7bcabb1f7acefd7a39eb0127f442\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdb77139e0ed80197ee132c0d7bf4a94834103ba4e3f08db44419f14df5522f9\",\"dweb:/ipfs/QmXHXjaKBifMCuetXojcVjNVLyVHSnfjvwzHBqGL6cXeEc\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol": { + "IFeeDistributor": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lastCheckpointTimestamp", + "type": "uint256" + } + ], + "name": "TokenCheckpointed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "userTokenTimeCursor", + "type": "uint256" + } + ], + "name": "TokensClaimed", + "type": "event" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "checkpointToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "checkpointTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "checkpointUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "claimToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "claimTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "depositToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "depositTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenLastBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getTokensDistributedInWeek", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getTotalSupplyAtTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getUserBalanceAtTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getUserTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getUserTokenTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVotingEscrow", + "outputs": [ + { + "internalType": "contract IVotingEscrow", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "checkpointToken(address)": "3902b9bc", + "checkpointTokens(address[])": "905d10ac", + "checkpointUser(address)": "14866e08", + "claimToken(address,address)": "ca31879d", + "claimTokens(address,address[])": "88720467", + "depositToken(address,uint256)": "338b5dea", + "depositTokens(address[],uint256[])": "7b8d6221", + "getTimeCursor()": "82aa5ad4", + "getTokenLastBalance(address)": "2308805b", + "getTokenTimeCursor(address)": "acbc1428", + "getTokensDistributedInWeek(address,uint256)": "d3dc4ca1", + "getTotalSupplyAtTimestamp(uint256)": "4f3c5090", + "getUserBalanceAtTimestamp(address,uint256)": "de681faf", + "getUserTimeCursor(address)": "876e69a1", + "getUserTokenTimeCursor(address,address)": "8050a7ee", + "getVotingEscrow()": "08b0308a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lastCheckpointTimestamp\",\"type\":\"uint256\"}],\"name\":\"TokenCheckpointed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userTokenTimeCursor\",\"type\":\"uint256\"}],\"name\":\"TokensClaimed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"checkpointToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"checkpointTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"checkpointUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"claimToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"claimTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"depositTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenLastBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getTokensDistributedInWeek\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getTotalSupplyAtTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getUserBalanceAtTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getUserTokenTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotingEscrow\",\"outputs\":[{\"internalType\":\"contract IVotingEscrow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Supports distributing arbitrarily many different tokens. In order to start distributing a new token to veBAL holders simply transfer the tokens to the `FeeDistributor` contract and then call `checkpointToken`.\",\"kind\":\"dev\",\"methods\":{\"checkpointToken(address)\":{\"details\":\"Any `token` balance held by the FeeDistributor above that which is returned by `getTokenLastBalance` will be distributed evenly across the time period since `token` was last checkpointed. This function will be called automatically before claiming tokens to ensure the contract is properly updated.\",\"params\":{\"token\":\"- The ERC20 token address to be checkpointed.\"}},\"checkpointTokens(address[])\":{\"details\":\"A version of `checkpointToken` which supports checkpointing multiple tokens. See `checkpointToken` for more details.\",\"params\":{\"tokens\":\"- An array of ERC20 token addresses to be checkpointed.\"}},\"checkpointUser(address)\":{\"params\":{\"user\":\"- The address of the user to be checkpointed.\"}},\"claimToken(address,address)\":{\"details\":\"It's not necessary to explicitly checkpoint before calling this function, it will ensure the FeeDistributor is up to date before calculating the amount of tokens to be claimed.\",\"params\":{\"token\":\"- The ERC20 token address to be claimed.\",\"user\":\"- The user on behalf of which to claim.\"},\"returns\":{\"_0\":\"The amount of `token` sent to `user` as a result of claiming.\"}},\"claimTokens(address,address[])\":{\"details\":\"A version of `claimToken` which supports claiming multiple `tokens` on behalf of `user`. See `claimToken` for more details.\",\"params\":{\"tokens\":\"- An array of ERC20 token addresses to be claimed.\",\"user\":\"- The user on behalf of which to claim.\"},\"returns\":{\"_0\":\"An array of the amounts of each token in `tokens` sent to `user` as a result of claiming.\"}},\"depositToken(address,uint256)\":{\"details\":\"Sending tokens directly to the FeeDistributor instead of using `depositTokens` may result in tokens being retroactively distributed to past weeks, or for the distribution to carry over to future weeks. If for some reason `depositTokens` cannot be called, in order to ensure that all tokens are correctly distributed manually call `checkpointToken` before and after the token transfer.\",\"params\":{\"amount\":\"- The amount of tokens to deposit.\",\"token\":\"- The ERC20 token address to distribute.\"}},\"depositTokens(address[],uint256[])\":{\"details\":\"A version of `depositToken` which supports depositing multiple `tokens` at once. See `depositToken` for more details.\",\"params\":{\"amounts\":\"- An array of token amounts to deposit.\",\"tokens\":\"- An array of ERC20 token addresses to distribute.\"}},\"getTokenTimeCursor(address)\":{\"params\":{\"token\":\"- The ERC20 token address to query.\"}},\"getTokensDistributedInWeek(address,uint256)\":{\"params\":{\"timestamp\":\"- The timestamp corresponding to the beginning of the week of interest.\",\"token\":\"- The ERC20 token address to query.\"}},\"getTotalSupplyAtTimestamp(uint256)\":{\"details\":\"Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values. This function requires the contract to have been checkpointed past `timestamp` so that the supply is cached.\",\"params\":{\"timestamp\":\"- The timestamp at which to read the cached total supply at.\"}},\"getUserBalanceAtTimestamp(address,uint256)\":{\"details\":\"Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values. This function requires `user` to have been checkpointed past `timestamp` so that their balance is cached.\",\"params\":{\"timestamp\":\"- The timestamp at which to read the `user`'s cached balance at.\",\"user\":\"- The address of the user of which to read the cached balance of.\"}},\"getUserTimeCursor(address)\":{\"params\":{\"user\":\"- The address of the user to query.\"}},\"getUserTokenTimeCursor(address,address)\":{\"params\":{\"token\":\"- The ERC20 token address to query.\",\"user\":\"- The address of the user to query.\"}}},\"title\":\"Fee Distributor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkpoint()\":{\"notice\":\"Caches the total supply of veBAL at the beginning of each week. This function will be called automatically before claiming tokens to ensure the contract is properly updated.\"},\"checkpointToken(address)\":{\"notice\":\"Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\"},\"checkpointTokens(address[])\":{\"notice\":\"Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\"},\"checkpointUser(address)\":{\"notice\":\"Caches the user's balance of veBAL at the beginning of each week. This function will be called automatically before claiming tokens to ensure the contract is properly updated.\"},\"claimToken(address,address)\":{\"notice\":\"Claims all pending distributions of the provided token for a user.\"},\"claimTokens(address,address[])\":{\"notice\":\"Claims a number of tokens on behalf of a user.\"},\"depositToken(address,uint256)\":{\"notice\":\"Deposits tokens to be distributed in the current week.\"},\"depositTokens(address[],uint256[])\":{\"notice\":\"Deposits tokens to be distributed in the current week.\"},\"getTimeCursor()\":{\"notice\":\"Returns the global time cursor representing the most earliest uncheckpointed week.\"},\"getTokenLastBalance(address)\":{\"notice\":\"Returns the FeeDistributor's cached balance of `token`.\"},\"getTokenTimeCursor(address)\":{\"notice\":\"Returns the token-level time cursor storing the timestamp at up to which tokens have been distributed.\"},\"getTokensDistributedInWeek(address,uint256)\":{\"notice\":\"Returns the amount of `token` which the FeeDistributor received in the week beginning at `timestamp`.\"},\"getTotalSupplyAtTimestamp(uint256)\":{\"notice\":\"Returns the cached total supply of veBAL as of the provided timestamp.\"},\"getUserBalanceAtTimestamp(address,uint256)\":{\"notice\":\"Returns the user's cached balance of veBAL as of the provided timestamp.\"},\"getUserTimeCursor(address)\":{\"notice\":\"Returns the user-level time cursor representing the most earliest uncheckpointed week.\"},\"getUserTokenTimeCursor(address,address)\":{\"notice\":\"Returns the user-level time cursor storing the timestamp of the latest token distribution claimed.\"},\"getVotingEscrow()\":{\"notice\":\"Returns the VotingEscrow (veBAL) token contract\"}},\"notice\":\"Distributes any tokens transferred to the contract (e.g. Protocol fees and any BAL emissions) among veBAL holders proportionally based on a snapshot of the week at which the tokens are sent to the FeeDistributor contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol\":\"IFeeDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol\":{\"keccak256\":\"0xd9c89f4c25f122124f18c9ec2423b71b2abed7683f778b802fded5dedda9c43e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a4a3195c4e81dcbc14491bdf4c2db12fda7ac7a5814189212864dcdad7755cdb\",\"dweb:/ipfs/QmZT2mieRk8KTVju5438ip1emikpsgLx5yy4wfYeJduiBr\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol": { + "IGaugeAdder": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "contract ILiquidityGaugeFactory", + "name": "gaugeFactory", + "type": "address" + } + ], + "name": "GaugeFactoryAdded", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rootGauge", + "type": "address" + } + ], + "name": "addArbitrumGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IStakingLiquidityGauge", + "name": "gauge", + "type": "address" + } + ], + "name": "addEthereumGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ILiquidityGaugeFactory", + "name": "factory", + "type": "address" + }, + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + } + ], + "name": "addGaugeFactory", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rootGauge", + "type": "address" + } + ], + "name": "addPolygonGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getFactoryForGaugeType", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + } + ], + "name": "getFactoryForGaugeTypeCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeController", + "outputs": [ + { + "internalType": "contract IGaugeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + } + ], + "name": "isGaugeFromValidFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "addArbitrumGauge(address)": "bf2972d5", + "addEthereumGauge(address)": "5e45a273", + "addGaugeFactory(address,uint8)": "6440e973", + "addPolygonGauge(address)": "f87fcfa2", + "getActionId(bytes4)": "851c1bb3", + "getFactoryForGaugeType(uint8,uint256)": "52854ed7", + "getFactoryForGaugeTypeCount(uint8)": "f3d8b4cf", + "getGaugeController()": "58de9ade", + "getPoolGauge(address)": "a8ea6875", + "isGaugeFromValidFactory(address,uint8)": "abfca009" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contract ILiquidityGaugeFactory\",\"name\":\"gaugeFactory\",\"type\":\"address\"}],\"name\":\"GaugeFactoryAdded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rootGauge\",\"type\":\"address\"}],\"name\":\"addArbitrumGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IStakingLiquidityGauge\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"addEthereumGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ILiquidityGaugeFactory\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"}],\"name\":\"addGaugeFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rootGauge\",\"type\":\"address\"}],\"name\":\"addPolygonGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getFactoryForGaugeType\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"}],\"name\":\"getFactoryForGaugeTypeCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeController\",\"outputs\":[{\"internalType\":\"contract IGaugeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"}],\"name\":\"isGaugeFromValidFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getPoolGauge(address)\":{\"details\":\"Gauge Factories also implement a `getPoolGauge` function which maps pools to gauges which it has deployed. This function provides global information by using which gauge has been added to the Gauge Controller to represent the canonical gauge for a given pool address.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addArbitrumGauge(address)\":{\"notice\":\"Adds a new gauge to the GaugeController for the \\\"Arbitrum\\\" type. This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. It should not be called with the address of the gauge which is deployed on Arbitrum\"},\"addEthereumGauge(address)\":{\"notice\":\"Adds a new gauge to the GaugeController for the \\\"Ethereum\\\" type.\"},\"addGaugeFactory(address,uint8)\":{\"notice\":\"Adds `factory` as an allowlisted factory contract for gauges with type `gaugeType`.\"},\"addPolygonGauge(address)\":{\"notice\":\"Adds a new gauge to the GaugeController for the \\\"Polygon\\\" type. This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. It should not be called with the address of the gauge which is deployed on Polygon\"},\"getFactoryForGaugeType(uint8,uint256)\":{\"notice\":\"Returns the `index`'th factory for gauge type `gaugeType`\"},\"getFactoryForGaugeTypeCount(uint8)\":{\"notice\":\"Returns the number of factories for gauge type `gaugeType`\"},\"getGaugeController()\":{\"notice\":\"Returns the address of the Gauge Controller\"},\"getPoolGauge(address)\":{\"notice\":\"Returns the gauge corresponding to a Balancer pool `pool` on Ethereum mainnet. Only returns gauges which have been added to the Gauge Controller.\"},\"isGaugeFromValidFactory(address,uint8)\":{\"notice\":\"Returns whether `gauge` has been deployed by one of the listed factories for the gauge type `gaugeType`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol\":\"IGaugeAdder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol\":{\"keccak256\":\"0x5b2f2de5c90bd3f1febfef21253d438f12e416982f82ffb949b8426a588e560a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://80acca63b490782caac2e401e64c42cf29d7b5f3c31e61b20f8da2fc4921f815\",\"dweb:/ipfs/QmPagWgv3EoqRRazmzP25JiAhC2r51s2sNJ2sNuBa1KFxn\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":{\"keccak256\":\"0x0c992c65f6cf48ce430d14518b1c402faf11f50fc3683321ea7dfb808eb3f3a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9d182e07a81d3444297d6a751c2a68ddf05b4f1b16c962ef0fe5389f1674309\",\"dweb:/ipfs/QmQYKQ1YecKzkGGrVxjexGEoxU8BPojfJCsNKp5VgYRFtA\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol\":{\"keccak256\":\"0xd65a23d87f8e22666d447cc91b2827622c652d074af328fa2d21d7b5a2a3f9dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88879d955c8720f8128dbc345336c74185474d7d41ff1327c298b4389c501c73\",\"dweb:/ipfs/QmSWfrTMxF7WpGX8e4oxjzP97smNE2SB9yE8rMLfPM8NYB\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol": { + "IGaugeController": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "int128", + "name": "gaugeType", + "type": "int128" + } + ], + "name": "add_gauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + } + ], + "name": "add_type", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "contract IAuthorizerAdaptor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int128", + "name": "typeId", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + } + ], + "name": "change_type_weight", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "checkpoint_gauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "uint256", + "name": "time", + "type": "uint256" + } + ], + "name": "gauge_relative_weight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "gauge_types", + "outputs": [ + { + "internalType": "int128", + "name": "", + "type": "int128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "n_gauge_types", + "outputs": [ + { + "internalType": "int128", + "name": "", + "type": "int128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "voting_escrow", + "outputs": [ + { + "internalType": "contract IVotingEscrow", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "add_gauge(address,int128)": "3a04f900", + "add_type(string,uint256)": "92d0d232", + "admin()": "f851a440", + "change_type_weight(int128,uint256)": "db1ca260", + "checkpoint_gauge(address)": "615e5237", + "gauge_relative_weight(address,uint256)": "d3078c94", + "gauge_types(address)": "3f9095b7", + "n_gauge_types()": "9fba03a1", + "token()": "fc0c546a", + "voting_escrow()": "dfe05031" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"int128\",\"name\":\"gaugeType\",\"type\":\"int128\"}],\"name\":\"add_gauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"add_type\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int128\",\"name\":\"typeId\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"change_type_weight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"checkpoint_gauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"gauge_relative_weight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"gauge_types\",\"outputs\":[{\"internalType\":\"int128\",\"name\":\"\",\"type\":\"int128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"n_gauge_types\",\"outputs\":[{\"internalType\":\"int128\",\"name\":\"\",\"type\":\"int128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voting_escrow\",\"outputs\":[{\"internalType\":\"contract IVotingEscrow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":\"IGaugeController\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol": { + "ILiquidityGauge": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":\"ILiquidityGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol": { + "ILiquidityGaugeFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "isGaugeFromFactory(address)": "ce3cc8bd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":\"ILiquidityGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol": { + "IRewardTokenDistributor": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "add_reward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "claim_rewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "deposit_reward_token", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "reward_data", + "outputs": [ + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + }, + { + "internalType": "uint256", + "name": "period_finish", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "last_update", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "integral", + "type": "uint256" + } + ], + "internalType": "struct IRewardTokenDistributor.Reward", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "reward_tokens", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "set_reward_distributor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "add_reward(address,address)": "e8de0d4d", + "claim_rewards(address)": "84e9bd7e", + "deposit_reward_token(address,uint256)": "93f7aa67", + "reward_data(address)": "48e9c65e", + "reward_tokens(uint256)": "54c49fe9", + "set_reward_distributor(address,address)": "058a3a24" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"add_reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"claim_rewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit_reward_token\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"reward_data\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"period_finish\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last_update\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"integral\",\"type\":\"uint256\"}],\"internalType\":\"struct IRewardTokenDistributor.Reward\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"reward_tokens\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"set_reward_distributor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":\"IRewardTokenDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":{\"keccak256\":\"0x0c992c65f6cf48ce430d14518b1c402faf11f50fc3683321ea7dfb808eb3f3a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9d182e07a81d3444297d6a751c2a68ddf05b4f1b16c962ef0fe5389f1674309\",\"dweb:/ipfs/QmQYKQ1YecKzkGGrVxjexGEoxU8BPojfJCsNKp5VgYRFtA\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol": { + "IRewardsOnlyGauge": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "streamer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "claimSignature", + "type": "bytes32" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "lp_token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reward_contract", + "outputs": [ + { + "internalType": "contract IChildChainStreamer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "childChainStreamer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "claimSig", + "type": "bytes32" + }, + { + "internalType": "address[8]", + "name": "rewardTokens", + "type": "address[8]" + } + ], + "name": "set_rewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "initialize(address,address,bytes32)": "6133f985", + "lp_token()": "82c63066", + "reward_contract()": "bf88a6ff", + "set_rewards(address,bytes32,address[8])": "47d2d5d3" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"streamer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"claimSignature\",\"type\":\"bytes32\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lp_token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reward_contract\",\"outputs\":[{\"internalType\":\"contract IChildChainStreamer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"childChainStreamer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"claimSig\",\"type\":\"bytes32\"},{\"internalType\":\"address[8]\",\"name\":\"rewardTokens\",\"type\":\"address[8]\"}],\"name\":\"set_rewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol\":\"IRewardsOnlyGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol\":{\"keccak256\":\"0xf5a92d4719022a69fde49af957fd21716bce7bcabb1f7acefd7a39eb0127f442\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdb77139e0ed80197ee132c0d7bf4a94834103ba4e3f08db44419f14df5522f9\",\"dweb:/ipfs/QmXHXjaKBifMCuetXojcVjNVLyVHSnfjvwzHBqGL6cXeEc\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol\":{\"keccak256\":\"0xc6b2e51a60e61ad332aa023a7228a67647fad18fd55358f73a3f86f09ec4ef3e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://82c4bb28284b68f05c0364a405cdfe46d62b0e91cc61c2208b47401d7a577528\",\"dweb:/ipfs/QmYGkdmLoLA86gzyYnowMgj6qwhzmBzDnz4nQWUs7U669A\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol": { + "ISingleRecipientGauge": { + "abi": [ + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "getRecipient()": "1b88094d", + "initialize(address)": "c4d66de8", + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":\"ISingleRecipientGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol": { + "ISingleRecipientGaugeFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugeRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "getRecipientGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getGaugeRecipient(address)": "fa72ce95", + "getRecipientGauge(address)": "7d5d0d10", + "isGaugeFromFactory(address)": "ce3cc8bd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"getRecipientGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGaugeRecipient(address)\":{\"notice\":\"Returns the recipient of `gauge`.\"},\"getRecipientGauge(address)\":{\"notice\":\"Returns the gauge which sends funds to `recipient`.\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol\":\"ISingleRecipientGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol\":{\"keccak256\":\"0x0fbfdb1443cb651d81d7b2a7bf5d4211f96a3cf2698d83af9653f701e9b10f26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c65076fedf4ab56455d4d94fde8547b6610b71ca16a7cf9ead88ef68ca2262a7\",\"dweb:/ipfs/QmPCo9osP53Ay871mk4sWxuAki7oq4odCtjpY3wpS743cn\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol": { + "ISmartWalletChecker": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "check", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "check(address)": "c23697a8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"check\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol\":\"ISmartWalletChecker\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol\":{\"keccak256\":\"0x6059bcd6c7c6340a99ca90b2d86bfa7717edea0fab1ed6066c8728b22fa539b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f24d81c22da9a67b1340e67c621341165078f711ed0fa6170bf93963a3e6f4\",\"dweb:/ipfs/QmWHammgoPiKnLDJFzczMHNHPb6fMh5ktNBNvUdhEffwnd\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol": { + "IStakelessGauge": { + "abi": [ + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":\"IStakelessGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol": { + "IStakingLiquidityGauge": { + "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": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "add_reward", + "outputs": [], + "stateMutability": "nonpayable", + "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": "user", + "type": "address" + } + ], + "name": "claim_rewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "deposit_reward_token", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lpToken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "lp_token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "reward_data", + "outputs": [ + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + }, + { + "internalType": "uint256", + "name": "period_finish", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "last_update", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "integral", + "type": "uint256" + } + ], + "internalType": "struct IRewardTokenDistributor.Reward", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "reward_tokens", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "set_reward_distributor", + "outputs": [], + "stateMutability": "nonpayable", + "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": [ + { + "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": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "add_reward(address,address)": "e8de0d4d", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "claim_rewards(address)": "84e9bd7e", + "deposit(uint256,address)": "6e553f65", + "deposit_reward_token(address,uint256)": "93f7aa67", + "initialize(address)": "c4d66de8", + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "lp_token()": "82c63066", + "reward_data(address)": "48e9c65e", + "reward_tokens(uint256)": "54c49fe9", + "set_reward_distributor(address,address)": "058a3a24", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093", + "withdraw(uint256)": "2e1a7d4d" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"add_reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"user\",\"type\":\"address\"}],\"name\":\"claim_rewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit_reward_token\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lpToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lp_token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"reward_data\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"period_finish\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last_update\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"integral\",\"type\":\"uint256\"}],\"internalType\":\"struct IRewardTokenDistributor.Reward\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"reward_tokens\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"set_reward_distributor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[{\"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\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"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`.\"},\"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\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol\":\"IStakingLiquidityGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":{\"keccak256\":\"0x0c992c65f6cf48ce430d14518b1c402faf11f50fc3683321ea7dfb808eb3f3a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9d182e07a81d3444297d6a751c2a68ddf05b4f1b16c962ef0fe5389f1674309\",\"dweb:/ipfs/QmQYKQ1YecKzkGGrVxjexGEoxU8BPojfJCsNKp5VgYRFtA\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol\":{\"keccak256\":\"0xd65a23d87f8e22666d447cc91b2827622c652d074af328fa2d21d7b5a2a3f9dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88879d955c8720f8128dbc345336c74185474d7d41ff1327c298b4389c501c73\",\"dweb:/ipfs/QmSWfrTMxF7WpGX8e4oxjzP97smNE2SB9yE8rMLfPM8NYB\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol": { + "IVeDelegation": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "adjusted_balance_of", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "adjusted_balance_of(address)": "bbf7408a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"adjusted_balance_of\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol\":\"IVeDelegation\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol\":{\"keccak256\":\"0xd26890d1f590fdace4a101d4d96d12a136ccc0b7b327460800b062e80ffba6b2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ce6c5e66fdb7676fd0048120c4b45fc653cc1035726b7449776519cd39d7a006\",\"dweb:/ipfs/QmV1mw4Q1ck69ZZXx91jgQXuENdtmFqkjtscrC7ofmajww\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol": { + "IVotingEscrow": { + "abi": [ + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "contract IAuthorizerAdaptor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "apply_smart_wallet_checker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newSmartWalletChecker", + "type": "address" + } + ], + "name": "commit_smart_wallet_checker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "point_history", + "outputs": [ + { + "components": [ + { + "internalType": "int128", + "name": "bias", + "type": "int128" + }, + { + "internalType": "int128", + "name": "slope", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "ts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blk", + "type": "uint256" + } + ], + "internalType": "struct IVotingEscrow.Point", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "smart_wallet_checker", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "user_point_epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "user_point_history", + "outputs": [ + { + "components": [ + { + "internalType": "int128", + "name": "bias", + "type": "int128" + }, + { + "internalType": "int128", + "name": "slope", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "ts", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blk", + "type": "uint256" + } + ], + "internalType": "struct IVotingEscrow.Point", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "admin()": "f851a440", + "apply_smart_wallet_checker()": "8e5b490f", + "checkpoint()": "c2c4c5c1", + "commit_smart_wallet_checker(address)": "57f901e2", + "epoch()": "900cf0cf", + "point_history(uint256)": "d1febfb9", + "smart_wallet_checker()": "7175d4f7", + "totalSupply(uint256)": "bd85b039", + "user_point_epoch(address)": "010ae757", + "user_point_history(address,uint256)": "28d09d47" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"apply_smart_wallet_checker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newSmartWalletChecker\",\"type\":\"address\"}],\"name\":\"commit_smart_wallet_checker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"point_history\",\"outputs\":[{\"components\":[{\"internalType\":\"int128\",\"name\":\"bias\",\"type\":\"int128\"},{\"internalType\":\"int128\",\"name\":\"slope\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"ts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blk\",\"type\":\"uint256\"}],\"internalType\":\"struct IVotingEscrow.Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"smart_wallet_checker\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"user_point_epoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"user_point_history\",\"outputs\":[{\"components\":[{\"internalType\":\"int128\",\"name\":\"bias\",\"type\":\"int128\"},{\"internalType\":\"int128\",\"name\":\"slope\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"ts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blk\",\"type\":\"uint256\"}],\"internalType\":\"struct IVotingEscrow.Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":\"IVotingEscrow\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol": { + "Errors": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202e9dc532a9009e8a638f30f6ff215ba79cd53d13ce0d27f08885d14ea49e0e6464736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0x2E SWAP14 0xC5 ORIGIN 0xA9 STOP SWAP15 DUP11 PUSH4 0x8F30F6FF 0x21 JUMPDEST 0xA7 SWAP13 0xD5 RETURNDATASIZE SGT 0xCE 0xD 0x27 CREATE DUP9 DUP6 0xD1 0x4E LOG4 SWAP15 0xE PUSH5 0x64736F6C63 NUMBER STOP SMOD ADD STOP CALLER ", + "sourceMap": "4248:8902:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202e9dc532a9009e8a638f30f6ff215ba79cd53d13ce0d27f08885d14ea49e0e6464736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2E SWAP14 0xC5 ORIGIN 0xA9 STOP SWAP15 DUP11 PUSH4 0x8F30F6FF 0x21 JUMPDEST 0xA7 SWAP13 0xD5 RETURNDATASIZE SGT 0xCE 0xD 0x27 CREATE DUP9 DUP6 0xD1 0x4E LOG4 SWAP15 0xE PUSH5 0x64736F6C63 NUMBER STOP SMOD ADD STOP CALLER ", + "sourceMap": "4248:8902:20:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":\"Errors\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "IAuthentication": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol": { + "ISignaturesValidator": { + "abi": [ + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the SignatureValidator helper, used to support meta-transactions.\",\"kind\":\"dev\",\"methods\":{\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getNextNonce(address)\":{\"details\":\"Returns the next nonce used by an address to sign messages.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":\"ISignaturesValidator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol": { + "ITemporarilyPausable": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getPausedState()": "1c0de051" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the TemporarilyPausable helper.\",\"events\":{\"PausedStateChanged(bool)\":{\"details\":\"Emitted every time the pause state changes by `_setPaused`.\"}},\"kind\":\"dev\",\"methods\":{\"getPausedState()\":{\"details\":\"Returns the current paused state.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":\"ITemporarilyPausable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol": { + "IWETH": { + "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": "deposit", + "outputs": [], + "stateMutability": "payable", + "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": [ + { + "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": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "deposit()": "d0e30db0", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "withdraw(uint256)": "2e1a7d4d" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":[{\"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\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for WETH9. See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol\",\"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 `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\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/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": "recipient", + "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" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "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.7.1+commit.f4a555be\"},\"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\":\"recipient\",\"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\":\"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 `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\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/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" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol": { + "IBALTokenHolder": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerToken", + "outputs": [ + { + "internalType": "contract IBalancerToken", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "sweepTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getBalancerToken()": "c0039699", + "getName()": "17d7de7c", + "sweepTokens(address,address,uint256)": "8b6ca32c", + "withdrawFunds(address,uint256)": "c1075329" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerToken\",\"outputs\":[{\"internalType\":\"contract IBalancerToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sweepTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol\":\"IBALTokenHolder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol\":{\"keccak256\":\"0x9eed89e06c4b50cf826aa9d628457744891ed6bdee2bc3b5b3d2c31812668958\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://57c02ebc0e2c2888af1790259e8c8389210ab937635a62ba1119cb2caef6acbb\",\"dweb:/ipfs/QmbonPRDmmEXXTw6zWi64rAQYMmegDiEB9tfvDNfuz5Kce\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol": { + "IAsset": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like types. This concept is unrelated to a Pool's Asset Managers.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":\"IAsset\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol": { + "IAuthorizer": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "actionId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "where", + "type": "address" + } + ], + "name": "canPerform", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "canPerform(bytes32,address,address)": "9be2a884" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"details\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol": { + "IFlashLoanRecipient": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "feeAmounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "receiveFlashLoan", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "receiveFlashLoan(address[],uint256[],uint256[],bytes)": "f04f2707" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"receiveFlashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"receiveFlashLoan(address[],uint256[],uint256[],bytes)\":{\"details\":\"When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient. At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the Vault, or else the entire flash loan will revert. `userData` is the same value passed in the `IVault.flashLoan` call.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":\"IFlashLoanRecipient\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol": { + "IProtocolFeesCollector": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newFlashLoanFeePercentage", + "type": "uint256" + } + ], + "name": "FlashLoanFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getCollectedFeeAmounts", + "outputs": [ + { + "internalType": "uint256[]", + "name": "feeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFlashLoanFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newFlashLoanFeePercentage", + "type": "uint256" + } + ], + "name": "setFlashLoanFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newSwapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdrawCollectedFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getAuthorizer()": "aaabadc5", + "getCollectedFeeAmounts(address[])": "e42abf35", + "getFlashLoanFeePercentage()": "d877845c", + "getSwapFeePercentage()": "55c67628", + "setFlashLoanFeePercentage(uint256)": "6b6b9f69", + "setSwapFeePercentage(uint256)": "38e9922e", + "vault()": "fbfa77cf", + "withdrawCollectedFees(address[],uint256[],address)": "6daefab6" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFlashLoanFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FlashLoanFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getCollectedFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFlashLoanFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newFlashLoanFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFlashLoanFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawCollectedFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":\"IProtocolFeesCollector\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol": { + "IVault": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "AuthorizerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ExternalBalanceTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IFlashLoanRecipient", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeAmount", + "type": "uint256" + } + ], + "name": "FlashLoan", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "delta", + "type": "int256" + } + ], + "name": "InternalBalanceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "int256[]", + "name": "deltas", + "type": "int256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "protocolFeeAmounts", + "type": "uint256[]" + } + ], + "name": "PoolBalanceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "assetManager", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "cashDelta", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "managedDelta", + "type": "int256" + } + ], + "name": "PoolBalanceManaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum IVault.PoolSpecialization", + "name": "specialization", + "type": "uint8" + } + ], + "name": "PoolRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "RelayerApprovalChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "name": "Swap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "TokensDeregistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "assetManagers", + "type": "address[]" + } + ], + "name": "TokensRegistered", + "type": "event" + }, + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "contract IWETH", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "assetInIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "assetOutIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IVault.BatchSwapStep[]", + "name": "swaps", + "type": "tuple[]" + }, + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.FundManagement", + "name": "funds", + "type": "tuple" + }, + { + "internalType": "int256[]", + "name": "limits", + "type": "int256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "batchSwap", + "outputs": [ + { + "internalType": "int256[]", + "name": "", + "type": "int256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "deregisterTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "minAmountsOut", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.ExitPoolRequest", + "name": "request", + "type": "tuple" + } + ], + "name": "exitPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IFlashLoanRecipient", + "name": "recipient", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "flashLoan", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getInternalBalance", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum IVault.PoolSpecialization", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getPoolTokenInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "managed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetManager", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "getPoolTokens", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "relayer", + "type": "address" + } + ], + "name": "hasApprovedRelayer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "maxAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.JoinPoolRequest", + "name": "request", + "type": "tuple" + } + ], + "name": "joinPool", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.PoolBalanceOpKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IVault.PoolBalanceOp[]", + "name": "ops", + "type": "tuple[]" + } + ], + "name": "managePoolBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.UserBalanceOpKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IAsset", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct IVault.UserBalanceOp[]", + "name": "ops", + "type": "tuple[]" + } + ], + "name": "manageUserBalance", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "assetInIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "assetOutIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IVault.BatchSwapStep[]", + "name": "swaps", + "type": "tuple[]" + }, + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.FundManagement", + "name": "funds", + "type": "tuple" + } + ], + "name": "queryBatchSwap", + "outputs": [ + { + "internalType": "int256[]", + "name": "assetDeltas", + "type": "int256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IVault.PoolSpecialization", + "name": "specialization", + "type": "uint8" + } + ], + "name": "registerPool", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "assetManagers", + "type": "address[]" + } + ], + "name": "registerTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "setAuthorizer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setRelayerApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IAsset", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "contract IAsset", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IVault.SingleSwap", + "name": "singleSwap", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.FundManagement", + "name": "funds", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "WETH()": "ad5c4648", + "batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256)": "945bcec9", + "deregisterTokens(bytes32,address[])": "7d3aeb96", + "exitPool(bytes32,address,address,(address[],uint256[],bytes,bool))": "8bdb3913", + "flashLoan(address,address[],uint256[],bytes)": "5c38449e", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getDomainSeparator()": "ed24911d", + "getInternalBalance(address,address[])": "0f5a6efa", + "getNextNonce(address)": "90193b7c", + "getPausedState()": "1c0de051", + "getPool(bytes32)": "f6c00927", + "getPoolTokenInfo(bytes32,address)": "b05f8e48", + "getPoolTokens(bytes32)": "f94d4668", + "getProtocolFeesCollector()": "d2946c2b", + "hasApprovedRelayer(address,address)": "fec90d72", + "joinPool(bytes32,address,address,(address[],uint256[],bytes,bool))": "b95cac28", + "managePoolBalance((uint8,bytes32,address,uint256)[])": "e6c46092", + "manageUserBalance((uint8,address,uint256,address,address)[])": "0e8e3e84", + "queryBatchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool))": "f84d066e", + "registerPool(uint8)": "09b2760f", + "registerTokens(bytes32,address[],address[])": "66a9c7d2", + "setAuthorizer(address)": "058a628f", + "setPaused(bool)": "16c38b3c", + "setRelayerApproval(address,address,bool)": "fa6e671d", + "swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256)": "52bbbe29" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ExternalBalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IFlashLoanRecipient\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"InternalBalanceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"protocolFeeAmounts\",\"type\":\"uint256[]\"}],\"name\":\"PoolBalanceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assetManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"cashDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"managedDelta\",\"type\":\"int256\"}],\"name\":\"PoolBalanceManaged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum IVault.PoolSpecialization\",\"name\":\"specialization\",\"type\":\"uint8\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"RelayerApprovalChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"TokensDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetManagers\",\"type\":\"address[]\"}],\"name\":\"TokensRegistered\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"assetInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"assetOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IVault.BatchSwapStep[]\",\"name\":\"swaps\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.FundManagement\",\"name\":\"funds\",\"type\":\"tuple\"},{\"internalType\":\"int256[]\",\"name\":\"limits\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"batchSwap\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"deregisterTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.ExitPoolRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"exitPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IFlashLoanRecipient\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getInternalBalance\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum IVault.PoolSpecialization\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"managed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"hasApprovedRelayer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.JoinPoolRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"joinPool\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.PoolBalanceOpKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IVault.PoolBalanceOp[]\",\"name\":\"ops\",\"type\":\"tuple[]\"}],\"name\":\"managePoolBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.UserBalanceOpKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IAsset\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct IVault.UserBalanceOp[]\",\"name\":\"ops\",\"type\":\"tuple[]\"}],\"name\":\"manageUserBalance\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"assetInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"assetOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IVault.BatchSwapStep[]\",\"name\":\"swaps\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.FundManagement\",\"name\":\"funds\",\"type\":\"tuple\"}],\"name\":\"queryBatchSwap\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"assetDeltas\",\"type\":\"int256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IVault.PoolSpecialization\",\"name\":\"specialization\",\"type\":\"uint8\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"assetManagers\",\"type\":\"address[]\"}],\"name\":\"registerTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setRelayerApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IAsset\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"contract IAsset\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IVault.SingleSwap\",\"name\":\"singleSwap\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.FundManagement\",\"name\":\"funds\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Full external interface for the Vault core contract - no external or public methods exist in the contract that don't override one of these declarations.\",\"events\":{\"AuthorizerChanged(address)\":{\"details\":\"Emitted when a new authorizer is set by `setAuthorizer`.\"},\"ExternalBalanceTransfer(address,address,address,uint256)\":{\"details\":\"Emitted when a user's Vault ERC20 allowance is used by the Vault to transfer tokens to an external account.\"},\"FlashLoan(address,address,uint256,uint256)\":{\"details\":\"Emitted for each individual flash loan performed by `flashLoan`.\"},\"InternalBalanceChanged(address,address,int256)\":{\"details\":\"Emitted when a user's Internal Balance changes, either from calls to `manageUserBalance`, or through interacting with Pools using Internal Balance. Because Internal Balance works exclusively with ERC20 tokens, ETH deposits and withdrawals will use the WETH address.\"},\"PoolBalanceChanged(bytes32,address,address[],int256[],uint256[])\":{\"details\":\"Emitted when a user joins or exits a Pool by calling `joinPool` or `exitPool`, respectively.\"},\"PoolBalanceManaged(bytes32,address,address,int256,int256)\":{\"details\":\"Emitted when a Pool's token Asset Manager alters its balance via `managePoolBalance`.\"},\"PoolRegistered(bytes32,address,uint8)\":{\"details\":\"Emitted when a Pool is registered by calling `registerPool`.\"},\"RelayerApprovalChanged(address,address,bool)\":{\"details\":\"Emitted every time a relayer is approved or disapproved by `setRelayerApproval`.\"},\"Swap(bytes32,address,address,uint256,uint256)\":{\"details\":\"Emitted for each individual swap performed by `swap` or `batchSwap`.\"},\"TokensDeregistered(bytes32,address[])\":{\"details\":\"Emitted when a Pool deregisters tokens by calling `deregisterTokens`.\"},\"TokensRegistered(bytes32,address[],address[])\":{\"details\":\"Emitted when a Pool registers tokens by calling `registerTokens`.\"}},\"kind\":\"dev\",\"methods\":{\"WETH()\":{\"details\":\"Returns the Vault's WETH instance.\"},\"batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256)\":{\"details\":\"Performs a series of swaps with one or multiple Pools. In each individual swap, the caller determines either the amount of tokens sent to or received from the Pool, depending on the `kind` value. Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array. Swaps are executed sequentially, in the order specified by the `swaps` array. Each array element describes a Pool, the token to be sent to this Pool, the token to receive from it, and an amount that is either `amountIn` or `amountOut` depending on the swap kind. Multihop swaps can be executed by passing an `amount` value of zero for a swap. This will cause the amount in/out of the previous swap to be used as the amount in for the current one. In a 'given in' swap, 'tokenIn' must equal the previous swap's `tokenOut`. For a 'given out' swap, `tokenOut` must equal the previous swap's `tokenIn`. The `assets` array contains the addresses of all assets involved in the swaps. These are either token addresses, or the IAsset sentinel value for ETH (the zero address). Each entry in the `swaps` array specifies tokens in and out by referencing an index in `assets`. Note that Pools never interact with ETH directly: it will be wrapped to or unwrapped from WETH by the Vault. Internal Balance usage, sender, and recipient are determined by the `funds` struct. The `limits` array specifies the minimum or maximum amount of each token the vault is allowed to transfer. `batchSwap` can be used to make a single swap, like `swap` does, but doing so requires more gas than the equivalent `swap` call. Emits `Swap` events.\"},\"deregisterTokens(bytes32,address[])\":{\"details\":\"Deregisters `tokens` for the `poolId` Pool. Must be called by the Pool's contract. Only registered tokens (via `registerTokens`) can be deregistered. Additionally, they must have zero total balance. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens must be deregistered in the same `deregisterTokens` call. A deregistered token can be re-registered later on, possibly with a different Asset Manager. Emits a `TokensDeregistered` event.\"},\"exitPool(bytes32,address,address,(address[],uint256[],bytes,bool))\":{\"details\":\"Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see `getPoolTokenInfo`). If the caller is not `sender`, it must be an authorized relayer for them. The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault: it just enforces these minimums. If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit. `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final `assets` array might not be sorted. Pools with no registered tokens cannot be exited. If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise, an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to do so will trigger a revert. `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the `tokens` array. This array must match the Pool's registered tokens. This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement their own custom logic. This typically requires additional information from the user (such as the expected number of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and passed directly to the Pool's contract. Emits a `PoolBalanceChanged` event.\"},\"flashLoan(address,address[],uint256[],bytes)\":{\"details\":\"Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it, and then reverting unless the tokens plus a proportional protocol fee have been returned. The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount for each token contract. `tokens` must be sorted in ascending order. The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the `receiveFlashLoan` call. Emits `FlashLoan` events.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"details\":\"Returns the Vault's Authorizer.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getInternalBalance(address,address[])\":{\"details\":\"Returns `user`'s Internal Balance for a set of tokens.\"},\"getNextNonce(address)\":{\"details\":\"Returns the next nonce used by an address to sign messages.\"},\"getPausedState()\":{\"details\":\"Returns the current paused state.\"},\"getPool(bytes32)\":{\"details\":\"Returns a Pool's contract address and specialization setting.\"},\"getPoolTokenInfo(bytes32,address)\":{\"details\":\"Returns detailed information for a Pool's registered token. `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` equals the sum of `cash` and `managed`. Internally, `cash` and `managed` are stored using 112 bits. No action can ever cause a Pool's token `cash`, `managed` or `total` balance to be greater than 2^112 - 1. `lastChangeBlock` is the number of the block in which `token`'s total balance was last modified (via either a join, exit, swap, or Asset Manager update). This value is useful to avoid so-called 'sandwich attacks', for example when developing price oracles. A change of zero (e.g. caused by a swap with amount zero) is considered a change for this purpose, and will update `lastChangeBlock`. `assetManager` is the Pool's token Asset Manager.\"},\"getPoolTokens(bytes32)\":{\"details\":\"Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of the tokens' `balances` changed. The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order. If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same order as passed to `registerTokens`. Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo` instead.\"},\"getProtocolFeesCollector()\":{\"details\":\"Returns the current protocol fee module.\"},\"hasApprovedRelayer(address,address)\":{\"details\":\"Returns true if `user` has approved `relayer` to act as a relayer for them.\"},\"joinPool(bytes32,address,address,(address[],uint256[],bytes,bool))\":{\"details\":\"Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized Pool shares. If the caller is not `sender`, it must be an authorized relayer for them. The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces these maximums. If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent back to the caller (not the sender, which is important for relayers). `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final `assets` array might not be sorted. Pools with no registered tokens cannot be joined. If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be withdrawn from Internal Balance: attempting to do so will trigger a revert. This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement their own custom logic. This typically requires additional information from the user (such as the expected number of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed directly to the Pool's contract, as is `recipient`. Emits a `PoolBalanceChanged` event.\"},\"managePoolBalance((uint8,bytes32,address,uint256)[])\":{\"details\":\"Performs a set of Pool balance operations, which may be either withdrawals, deposits or updates. Pool Balance management features batching, which means a single contract call can be used to perform multiple operations of different kinds, with different Pools and tokens, at once. For each operation, the caller must be registered as the Asset Manager for `token` in `poolId`.\"},\"manageUserBalance((uint8,address,uint256,address,address)[])\":{\"details\":\"Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer) and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as it lets integrators reuse a user's Vault allowance. For each operation, if the caller is not `sender`, it must be an authorized relayer for them.\"},\"queryBatchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool))\":{\"details\":\"Simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result. Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH) the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it receives are the same that an equivalent `batchSwap` call would receive. Unlike `batchSwap`, this function performs no checks on the sender or recipient field in the `funds` struct. This makes it suitable to be called by off-chain applications via eth_call without needing to hold tokens, approve them for the Vault, or even know a user's address. Note that this function is not 'view' (due to implementation details): the client code must explicitly execute eth_call instead of eth_sendTransaction.\"},\"registerPool(uint8)\":{\"details\":\"Registers the caller account as a Pool with a given specialization setting. Returns the Pool's ID, which is used in all Pool-related functions. Pools cannot be deregistered, nor can the Pool's specialization be changed. The caller is expected to be a smart contract that implements either `IGeneralPool` or `IMinimalSwapInfoPool`, depending on the chosen specialization setting. This contract is known as the Pool's contract. Note that the same contract may register itself as multiple Pools with unique Pool IDs, or in other words, multiple Pools may share the same contract. Emits a `PoolRegistered` event.\"},\"registerTokens(bytes32,address[],address[])\":{\"details\":\"Registers `tokens` for the `poolId` Pool. Must be called by the Pool's contract. Pools can only interact with tokens they have registered. Users join a Pool by transferring registered tokens, exit by receiving registered tokens, and can only swap registered tokens. Each token can only be registered once. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens must be registered in the same `registerTokens` call, and they must be sorted in ascending order. The `tokens` and `assetManagers` arrays must have the same length, and each entry in these indicates the Asset Manager for the corresponding token. Asset Managers can manage a Pool's tokens via `managePoolBalance`, depositing and withdrawing them directly, and can even set their balance to arbitrary amounts. They are therefore expected to be highly secured smart contracts with sound design principles, and the decision to register an Asset Manager should not be made lightly. Pools can choose not to assign an Asset Manager to a given token by passing in the zero address. Once an Asset Manager is set, it cannot be changed except by deregistering the associated token and registering again with a different Asset Manager. Emits a `TokensRegistered` event.\"},\"setAuthorizer(address)\":{\"details\":\"Sets a new Authorizer for the Vault. The caller must be allowed by the current Authorizer to do this. Emits an `AuthorizerChanged` event.\"},\"setPaused(bool)\":{\"details\":\"Safety mechanism to pause most Vault operations in the event of an emergency - typically detection of an error in some part of the system. The Vault can only be paused during an initial time period, after which pausing is forever disabled. While the contract is paused, the following features are disabled: - depositing and transferring internal balance - transferring external balance (using the Vault's allowance) - swaps - joining Pools - Asset Manager interactions Internal Balance can still be withdrawn, and Pools exited.\"},\"setRelayerApproval(address,address,bool)\":{\"details\":\"Allows `relayer` to act as a relayer for `sender` if `approved` is true, and disallows it otherwise. Emits a `RelayerApprovalChanged` event.\"},\"swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256)\":{\"details\":\"Performs a swap with a single Pool. If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens taken from the Pool, which must be greater than or equal to `limit`. If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens sent to the Pool, which must be less than or equal to `limit`. Internal Balance usage and the recipient are determined by the `funds` struct. Emits a `Swap` event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol": { + "Authentication": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Building block for performing access control on external functions. This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to only make them callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol": { + "InputHelpers": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204729f62a85af766094cfaa1ed09092d886bd3e58bf4cb6f1e2704a0db96b695c64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 SELFBALANCE 0x29 0xF6 0x2A DUP6 0xAF PUSH23 0x6094CFAA1ED09092D886BD3E58BF4CB6F1E2704A0DB96B PUSH10 0x5C64736F6C6343000701 STOP CALLER ", + "sourceMap": "893:1008:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204729f62a85af766094cfaa1ed09092d886bd3e58bf4cb6f1e2704a0db96b695c64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE 0x29 0xF6 0x2A DUP6 0xAF PUSH23 0x6094CFAA1ED09092D886BD3E58BF4CB6F1E2704A0DB96B PUSH10 0x5C64736F6C6343000701 STOP CALLER ", + "sourceMap": "893:1008:34:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol": { + "SingletonAuthentication": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getVault()": "8d928af8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol": { + "Math": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220aaa376318fc78216083f4d22131d6d3204d21ea26b9e8123d6d71b67fbcd572164736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0xAA LOG3 PUSH23 0x318FC78216083F4D22131D6D3204D21EA26B9E8123D6D7 SHL PUSH8 0xFBCD572164736F6C PUSH4 0x43000701 STOP CALLER ", + "sourceMap": "290:2500:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220aaa376318fc78216083f4d22131d6d3204d21ea26b9e8123d6d71b67fbcd572164736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA LOG3 PUSH23 0x318FC78216083F4D22131D6D3204D21EA26B9E8123D6D7 SHL PUSH8 0xFBCD572164736F6C PUSH4 0x43000701 STOP CALLER ", + "sourceMap": "290:2500:36:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Adapted from OpenZeppelin's SafeMath library.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":\"Math\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol": { + "Address": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa57030e80d37a1fc5c862d6c7568bba602ab6dcf954164e39f2f5d85c6a43e764736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 STATICCALL JUMPI SUB 0xE DUP1 0xD3 PUSH27 0x1FC5C862D6C7568BBA602AB6DCF954164E39F2F5D85C6A43E76473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "439:5334:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fa57030e80d37a1fc5c862d6c7568bba602ab6dcf954164e39f2f5d85c6a43e764736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STATICCALL JUMPI SUB 0xE DUP1 0xD3 PUSH27 0x1FC5C862D6C7568BBA602AB6DCF954164E39F2F5D85C6A43E76473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "439:5334:37:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol\":{\"keccak256\":\"0xd0124aa262584bcdc163089547074252ace79201c02de2573fc8154cdc024b25\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://333957f2afd70aef1757e5e84a8ed6e5048eb8233448a3c67e7111ae9f01b6bc\",\"dweb:/ipfs/QmSQcuZH5rkS8D1PGt6tJZpkPM8onWPwNe24iEVjZWidt4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol": { + "Clones": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220af9f5b777bf25b05273bbebc82b2f38fc7e9b6af7f1c9f68f1b7dea7bc7749e164736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0xAF SWAP16 JUMPDEST PUSH24 0x7BF25B05273BBEBC82B2F38FC7E9B6AF7F1C9F68F1B7DEA7 0xBC PUSH24 0x49E164736F6C634300070100330000000000000000000000 ", + "sourceMap": "740:2860:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220af9f5b777bf25b05273bbebc82b2f38fc7e9b6af7f1c9f68f1b7dea7bc7749e164736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF SWAP16 JUMPDEST PUSH24 0x7BF25B05273BBEBC82B2F38FC7E9B6AF7F1C9F68F1B7DEA7 0xBC PUSH24 0x49E164736F6C634300070100330000000000000000000000 ", + "sourceMap": "740:2860:38:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":\"Clones\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":{\"keccak256\":\"0x0ef386c5d211024ce07fd77245128db56fdfd2aae7e5e4232b72fb0cecb6be03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f09b20288f085f7a2ce289a8b1676d2d873e76a25929fbd9328e2d722225b5\",\"dweb:/ipfs/QmbVW5u6dSXsTBb66tKHS9QN5RPonEcpNzAjJ1nBe8UVRi\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol": { + "EIP712": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":\"EIP712\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol": { + "ERC20": { + "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": [ + { + "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": "recipient", + "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" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50604051610ad1380380610ad18339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825164010000000081118282018810171561008257600080fd5b82525081516020918201929091019080838360005b838110156100af578181015183820152602001610097565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156100ff57600080fd5b90830190602082018581111561011457600080fd5b825164010000000081118282018810171561012e57600080fd5b82525081516020918201929091019080838360005b8381101561015b578181015183820152602001610143565b50505050905090810190601f1680156101885780820380516001836020036101000a031916815260200191505b50604052505082516101a2915060039060208501906101cb565b5080516101b69060049060208401906101cb565b50506005805460ff191660121790555061025e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061020c57805160ff1916838001178555610239565b82800160010185558215610239579182015b8281111561023957825182559160200191906001019061021e565b50610245929150610249565b5090565b5b80821115610245576000815560010161024a565b6108648061026d6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610287578063a9059cbb146102c0578063dd62ed3e146102f9576100c9565b8063395093511461021357806370a082311461024c57806395d89b411461027f576100c9565b806318160ddd116100b257806318160ddd1461019857806323b872dd146101b2578063313ce567146101f5576100c9565b806306fdde03146100ce578063095ea7b31461014b575b600080fd5b6100d6610334565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101105781810151838201526020016100f8565b50505050905090810190601f16801561013d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101846004803603604081101561016157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103e8565b604080519115158252519081900360200190f35b6101a06103fe565b60408051918252519081900360200190f35b610184600480360360608110156101c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610404565b6101fd610465565b6040805160ff9092168252519081900360200190f35b6101846004803603604081101561022957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561046e565b6101a06004803603602081101561026257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b1565b6100d66104d9565b6101846004803603604081101561029d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610558565b610184600480360360408110156102d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561059e565b6101a06004803603604081101561030f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166105ab565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103f53384846105e3565b50600192915050565b60025490565b6000610411848484610652565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203380855292529091205461045b918691610456908661019e61077b565b6105e3565b5060019392505050565b60055460ff1690565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f59185906104569086610791565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f5918590610456908661019f61077b565b60006103f5338484610652565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61067673ffffffffffffffffffffffffffffffffffffffff841615156101986107aa565b61069a73ffffffffffffffffffffffffffffffffffffffff831615156101996107aa565b6106a58383836107bc565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020546106d890826101a061077b565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546107149082610791565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061078a84841115836107aa565b5050900390565b60008282016107a384821015836107aa565b9392505050565b816107b8576107b8816107c1565b5050565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfea264697066735822122037dd17d7f87380b1cff70e95be43d4d5c18b124099234c93dbeb09c5a63baf6d64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xAD1 CODESIZE SUB DUP1 PUSH2 0xAD1 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xAF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x143 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x188 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP DUP3 MLOAD PUSH2 0x1A2 SWAP2 POP PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1CB JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1B6 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1CB JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH2 0x25E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x20C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x239 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x239 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x239 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x21E JUMP JUMPDEST POP PUSH2 0x245 SWAP3 SWAP2 POP PUSH2 0x249 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x24A JUMP JUMPDEST PUSH2 0x864 DUP1 PUSH2 0x26D 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 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F5 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x110 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A0 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x404 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x465 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x46E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x4B1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x4D9 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x558 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x59E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5AB JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE 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 0x3C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x411 DUP5 DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x45B SWAP2 DUP7 SWAP2 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19E PUSH2 0x77B JUMP JUMPDEST PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19F PUSH2 0x77B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x676 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x69A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x6A5 DUP4 DUP4 DUP4 PUSH2 0x7BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x6D8 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x77B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x714 SWAP1 DUP3 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78A DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x7A3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x7B8 JUMPI PUSH2 0x7B8 DUP2 PUSH2 0x7C1 JUMP JUMPDEST POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATACOPY 0xDD OR 0xD7 0xF8 PUSH20 0x80B1CFF70E95BE43D4D5C18B124099234C93DBEB MULMOD 0xC5 0xA6 EXTCODESIZE 0xAF PUSH14 0x64736F6C63430007010033000000 ", + "sourceMap": "1427:9428:40:-:0;;;2052:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2052:137:40;;;;;;;;;;-1:-1:-1;2052:137:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2052:137:40;;;;;;;;;;-1:-1:-1;2052:137:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2052:137:40;;-1:-1:-1;;2118:13:40;;;;-1:-1:-1;2118:5:40;;:13;;;;;:::i;:::-;-1:-1:-1;2141:17:40;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:40;:14;;-1:-1:-1;;2168:14:40;2180:2;2168:14;;;-1:-1:-1;1427:9428:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1427:9428:40;;;-1:-1:-1;1427:9428:40;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610287578063a9059cbb146102c0578063dd62ed3e146102f9576100c9565b8063395093511461021357806370a082311461024c57806395d89b411461027f576100c9565b806318160ddd116100b257806318160ddd1461019857806323b872dd146101b2578063313ce567146101f5576100c9565b806306fdde03146100ce578063095ea7b31461014b575b600080fd5b6100d6610334565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101105781810151838201526020016100f8565b50505050905090810190601f16801561013d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101846004803603604081101561016157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103e8565b604080519115158252519081900360200190f35b6101a06103fe565b60408051918252519081900360200190f35b610184600480360360608110156101c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610404565b6101fd610465565b6040805160ff9092168252519081900360200190f35b6101846004803603604081101561022957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561046e565b6101a06004803603602081101561026257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b1565b6100d66104d9565b6101846004803603604081101561029d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610558565b610184600480360360408110156102d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561059e565b6101a06004803603604081101561030f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166105ab565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103f53384846105e3565b50600192915050565b60025490565b6000610411848484610652565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203380855292529091205461045b918691610456908661019e61077b565b6105e3565b5060019392505050565b60055460ff1690565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f59185906104569086610791565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f5918590610456908661019f61077b565b60006103f5338484610652565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61067673ffffffffffffffffffffffffffffffffffffffff841615156101986107aa565b61069a73ffffffffffffffffffffffffffffffffffffffff831615156101996107aa565b6106a58383836107bc565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020546106d890826101a061077b565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546107149082610791565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061078a84841115836107aa565b5050900390565b60008282016107a384821015836107aa565b9392505050565b816107b8576107b8816107c1565b5050565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfea264697066735822122037dd17d7f87380b1cff70e95be43d4d5c18b124099234c93dbeb09c5a63baf6d64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F5 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x110 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A0 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x404 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x465 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x46E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x4B1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x4D9 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x558 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x59E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5AB JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE 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 0x3C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x411 DUP5 DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x45B SWAP2 DUP7 SWAP2 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19E PUSH2 0x77B JUMP JUMPDEST PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19F PUSH2 0x77B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x676 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x69A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x6A5 DUP4 DUP4 DUP4 PUSH2 0x7BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x6D8 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x77B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x714 SWAP1 DUP3 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78A DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x7A3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x7B8 JUMPI PUSH2 0x7B8 DUP2 PUSH2 0x7C1 JUMP JUMPDEST POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATACOPY 0xDD OR 0xD7 0xF8 PUSH20 0x80B1CFF70E95BE43D4D5C18B124099234C93DBEB MULMOD 0xC5 0xA6 EXTCODESIZE 0xAF PUSH14 0x64736F6C63430007010033000000 ", + "sourceMap": "1427:9428:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:164;;;;;;;;;;;;;;;;-1:-1:-1;4288:164:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3297:98;;;:::i;:::-;;;;;;;;;;;;;;;;4919:386;;;;;;;;;;;;;;;;-1:-1:-1;4919:386:40;;;;;;;;;;;;;;;;;;:::i;3156:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5700:211;;;;;;;;;;;;;;;;-1:-1:-1;5700:211:40;;;;;;;;;:::i;3453:117::-;;;;;;;;;;;;;;;;-1:-1:-1;3453:117:40;;;;:::i;2448:85::-;;;:::i;6398:312::-;;;;;;;;;;;;;;;;-1:-1:-1;6398:312:40;;;;;;;;;:::i;3773:170::-;;;;;;;;;;;;;;;;-1:-1:-1;3773:170:40;;;;;;;;;:::i;4001:149::-;;;;;;;;;;;;;;;;-1:-1:-1;4001:149:40;;;;;;;;;;;:::i;2254:81::-;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4288:164::-;4371:4;4387:37;4396:10;4408:7;4417:6;4387:8;:37::i;:::-;-1:-1:-1;4441:4:40;4288:164;;;;:::o;3297:98::-;3376:12;;3297:98;:::o;4919:386::-;5055:4;5071:36;5081:6;5089:9;5100:6;5071:9;:36::i;:::-;5183:19;;;;;;;:11;:19;;;;;;;;5159:10;5183:31;;;;;;;;;5117:160;;5139:6;;5183:84;;5219:6;9861:3:20;5183:35:40;:84::i;:::-;5117:8;:160::i;:::-;-1:-1:-1;5294:4:40;4919:386;;;;;:::o;3156:81::-;3221:9;;;;3156:81;:::o;5700:211::-;5813:10;5788:4;5834:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;5788:4;;5804:79;;5825:7;;5834:48;;5871:10;5834:36;:48::i;3453:117::-;3545:18;;3519:7;3545:18;;;;;;;;;;;;3453:117::o;2448:85::-;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;6398:312;6529:10;6491:4;6574:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;6491:4;;6507:175;;6553:7;;6574:98;;6611:15;9935:3:20;6574:36:40;:98::i;3773:170::-;3859:4;3875:40;3885:10;3897:9;3908:6;3875:9;:40::i;4001:149::-;4116:18;;;;4090:7;4116:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4001:149::o;9459:213::-;9582:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9633:32;;;;;;;;;;;;;;;;;9459:213;;;:::o;7184:559::-;7311:71;7320:20;;;;;9457:3:20;7311:8:40;:71::i;:::-;7392:72;7401:23;;;;;9525:3:20;7392:8:40;:72::i;:::-;7475:47;7496:6;7504:9;7515:6;7475:20;:47::i;:::-;7553:17;;;:9;:17;;;;;;;;;;;:68;;7575:6;10003:3:20;7553:21:40;:68::i;:::-;7533:17;;;;:9;:17;;;;;;;;;;;:88;;;;7654:20;;;;;;;:32;;7679:6;7654:24;:32::i;:::-;7631:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7701:35;;;;;;;7631:20;;7701:35;;;;;;;;;;;;;7184:559;;;:::o;1816:206:46:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:46;;;1816:206::o;966:167::-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;:::-;1125:1;966:167;-1:-1:-1;;;966:167:46:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;10670:183:40:-;;;;:::o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "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.7.1+commit.f4a555be\"},\"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\":[{\"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\":\"recipient\",\"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. 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}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.\"},\"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 {_setupDecimals} is called. 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: - `recipient` 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\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x20623aa7d1b93255067c3b4bf2a7570dbb1f2ff1c193f54153d341713fac05cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e14e095254afb92780d93c006d5cc607997a232be8ee81a373d046219bb54c50\",\"dweb:/ipfs/QmU5qYxtXNfj4qFGD2W2ekwje4VFSXK8cR89Tx9NvLh1cJ\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol": { + "ERC20Burnable": { + "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": "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": "recipient", + "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" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "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.7.1+commit.f4a555be\"},\"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\":\"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\":\"recipient\",\"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\":\"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}. 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 {_setupDecimals} is called. 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: - `recipient` 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\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol\":\"ERC20Burnable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x20623aa7d1b93255067c3b4bf2a7570dbb1f2ff1c193f54153d341713fac05cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e14e095254afb92780d93c006d5cc607997a232be8ee81a373d046219bb54c50\",\"dweb:/ipfs/QmU5qYxtXNfj4qFGD2W2ekwje4VFSXK8cR89Tx9NvLh1cJ\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol\":{\"keccak256\":\"0x6df4b13f2ea83b6b7fd766ed4d2c9edbfed217825cb867ecf92ac11af44b9ae4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f644d0949a840356fd81eaf45a989ede75abe1e653ce1d5e59e82b7a13a97b4e\",\"dweb:/ipfs/QmUNEpURhR9LA8gwmvM6vbqmxcTVkiXcGHPSL5oCVCKVPZ\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol": { + "ERC20Permit": { + "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": [], + "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": "recipient", + "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" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "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.7.1+commit.f4a555be\"},\"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\":[],\"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\":\"recipient\",\"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 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. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. 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 {_setupDecimals} is called. 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}.\"},\"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: - `recipient` 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\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":\"ERC20Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x20623aa7d1b93255067c3b4bf2a7570dbb1f2ff1c193f54153d341713fac05cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e14e095254afb92780d93c006d5cc607997a232be8ee81a373d046219bb54c50\",\"dweb:/ipfs/QmU5qYxtXNfj4qFGD2W2ekwje4VFSXK8cR89Tx9NvLh1cJ\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0x4a58adfe4ffa5eef5647652230561a481d43a8581a4e7169b3960a0d60e04d91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d10af8e5d9396285b1bb0b9fb55acd9d05a0c84ed634783b4ddf4c55073ea37\",\"dweb:/ipfs/QmRX42mfQUG2HqZg8cQDfiFJ5DaxWHKNimyFpqn9PbfSJs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol": { + "EnumerableSet": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122041df690a5c9378931bce214ba2f72544605a8c379089a28ecc2c0a0b241e34cf64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 COINBASE 0xDF PUSH10 0xA5C9378931BCE214BA2 0xF7 0x25 DIFFICULTY PUSH1 0x5A DUP13 CALLDATACOPY SWAP1 DUP10 LOG2 DUP15 0xCC 0x2C EXP SIGNEXTEND 0x24 0x1E CALLVALUE 0xCF PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1210:8346:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122041df690a5c9378931bce214ba2f72544605a8c379089a28ecc2c0a0b241e34cf64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE 0xDF PUSH10 0xA5C9378931BCE214BA2 0xF7 0x25 DIFFICULTY PUSH1 0x5A DUP13 CALLDATACOPY SWAP1 DUP10 LOG2 DUP15 0xCC 0x2C EXP SIGNEXTEND 0x24 0x1E CALLVALUE 0xCF PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1210:8346:43:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa644f3f9066d6a300bd7c1c214ce55c1569bb5ec54815d49c5c7a1a63cd03df3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81ee2467e6a0f340d64738d7a03a407e88caa5ee31cb3c8bd6990985f1891acc\",\"dweb:/ipfs/QmP7s6CSdDLGFjNxi9Q8GEVJFiD6QkeseGD857bPE7E7Ki\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol": { + "ReentrancyGuard": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol": { + "SafeERC20": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200ce8672a052e2d0f8b6b2e6df66a566afc558e3dfa0755aff2a7bdab81cb3a2b64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0xC 0xE8 PUSH8 0x2A052E2D0F8B6B2E PUSH14 0xF66A566AFC558E3DFA0755AFF2A7 0xBD 0xAB DUP2 0xCB GASPRICE 0x2B PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "976:1750:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200ce8672a052e2d0f8b6b2e6df66a566afc558e3dfa0755aff2a7bdab81cb3a2b64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC 0xE8 PUSH8 0x2A052E2D0F8B6B2E PUSH14 0xF66A566AFC558E3DFA0755AFF2A7 0xBD 0xAB DUP2 0xCB GASPRICE 0x2B PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "976:1750:45:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"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\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\":{\"keccak256\":\"0x773d0bf95fd51f7042cf5e20d1424aae24218c358ad71676c29878f76d81e7f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86d0397ef1443257ad7a49306f3f2bdd490f4a238d4d416373031b8262d211ee\",\"dweb:/ipfs/QmUHBu6gWfnhLEjQ3FCcbha6zUVZVfPFaNJMvnz9h8Prvy\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol": { + "SafeMath": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d4424fe2a13a7a1a3b2fcdab1628b038175b7f4d761bb8af705bf743149fc08764736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID 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 0xD4 TIMESTAMP 0x4F 0xE2 LOG1 GASPRICE PUSH27 0x1A3B2FCDAB1628B038175B7F4D761BB8AF705BF743149FC0876473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "714:1310:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d4424fe2a13a7a1a3b2fcdab1628b038175b7f4d761bb8af705bf743149fc08764736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD4 TIMESTAMP 0x4F 0xE2 LOG1 GASPRICE PUSH27 0x1A3B2FCDAB1628B038175B7F4D761BB8AF705BF743149FC0876473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "714:1310:46:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "contracts/BalancerMinter.sol": { + "BalancerMinter": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IBalancerTokenAdmin", + "name": "tokenAdmin", + "type": "address" + }, + { + "internalType": "contract IGaugeController", + "name": "gaugeController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "minted", + "type": "uint256" + } + ], + "name": "Minted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "MinterApprovalSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "allowed_to_mint_for", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerTokenAdmin", + "outputs": [ + { + "internalType": "contract IBalancerTokenAdmin", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeController", + "outputs": [ + { + "internalType": "contract IGaugeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getMinterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "mintFor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "gauges", + "type": "address[]" + } + ], + "name": "mintMany", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "gauges", + "type": "address[]" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "mintManyFor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "mint_for", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[8]", + "name": "gauges", + "type": "address[8]" + } + ], + "name": "mint_many", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "minted", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "setMinterApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "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": "setMinterApprovalWithSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "toggle_approve_mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6101606040527fc87351a089bbdc3b2b9299d2ce29f08fd982826b275b3642939a2f7fdd8153806101405234801561003657600080fd5b506040516114d53803806114d58339818101604052604081101561005957600080fd5b508051602091820151604080518082018252600f81526e2130b630b731b2b91026b4b73a32b960891b818601908152825180840184526001808252603160f81b828901908152600091909155925190912060805251902060a0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c052805163c003969960e01b81529051929391926001600160a01b0385169263c00396999260048082019391829003018186803b15801561011557600080fd5b505afa158015610129573d6000803e3d6000fd5b505050506040513d602081101561013f57600080fd5b50516001600160601b0319606091821b811660e05292811b8316610100521b166101205260805160a05160c05160e05160601c6101005160601c6101205160601c610140516113076101ce600039806108e45250806106375280610eea525080610ae95280610be55280610cf552508061081e525080610e10525080610e52525080610e3152506113076000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638b752bb0116100b2578063c003969911610081578063dd289d6011610066578063dd289d601461047f578063e6dec36f146104b2578063ed24911d146104ba5761011b565b8063c003969914610419578063c6542794146104215761011b565b80638b752bb01461038e57806390193b7c146103c9578063a0990033146102a0578063a51e1904146103fc5761011b565b80633c543bc6116100ee5780633c543bc6146102a057806358de9ade146102ef5780636a627842146103205780637504a15d146103535761011b565b80630de54ba01461012057806327f18ae31461015d578063397ada21146101985780633b9f73841461021a575b600080fd5b61015b6004803603604081101561013657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156104c2565b005b61015b6004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166104d1565b610208600480360360208110156101ae57600080fd5b8101906020810181356401000000008111156101c957600080fd5b8201836020820111156101db57600080fd5b803590602001918460208302840111640100000000831117156101fd57600080fd5b509092509050610526565b60408051918252519081900360200190f35b6102086004803603604081101561023057600080fd5b81019060208101813564010000000081111561024b57600080fd5b82018360208201111561025d57600080fd5b8035906020019184602083028401116401000000008311171561027f57600080fd5b91935091503573ffffffffffffffffffffffffffffffffffffffff1661054b565b6102db600480360360408110156102b657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166105fa565b604080519115158252519081900360200190f35b6102f7610635565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102086004803603602081101561033657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610659565b6102086004803603604081101561036957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661067c565b610208600480360360408110156103a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610719565b610208600480360360208110156103df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610751565b61015b600480360361010081101561041357600080fd5b50610779565b6102f761081c565b61015b600480360360e081101561043757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101351515916040820135169060608101359060ff6080820135169060a08101359060c00135610840565b61015b6004803603602081101561049557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610aa7565b6102f7610ae7565b610208610b0b565b6104cd823383610b1a565b5050565b6104d9610bb6565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561051e5761051c8282610bcf565b505b6104cd610c92565b6000610530610bb6565b61053b838333610c99565b9050610545610c92565b92915050565b6000610555610bb6565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff166105de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061128d6023913960400191505060405180910390fd5b6105e9848484610c99565b90506105f3610c92565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610663610bb6565b61066d8233610bcf565b9050610677610c92565b919050565b6000610686610bb6565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff1661070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061128d6023913960400191505060405180910390fd5b61053b8383610bcf565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b610781610bb6565b60005b600881101561081057600082826008811061079b57fe5b602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107d757610810565b6108078282600881106107e657fe5b602002013573ffffffffffffffffffffffffffffffffffffffff1633610bcf565b50600101610784565b50610819610c92565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b4284116108ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5369676e61747572652065787069726564000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020908152604080832080546001810190915581517f000000000000000000000000000000000000000000000000000000000000000081850152948c16858301528a151560608601526080850181905260a08086018a90528251808703909101815260c0909501909152835193909101929092209061094b82610da5565b9050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156109a9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2457508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b610a9a8b8a8c610b1a565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604080832033845290915290205461081990829060ff16156104c2565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610b15610e0c565b905090565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155825190815291519293927fa3ffb51320bbca4e61e7423e3c97dd7bd7e31b6ea7429eb26ef92780e84572a09281900390910190a3505050565b610bc860026000541415610190610ed7565b6002600055565b6000610bdb8383610ee5565b90508015610545577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610c7457600080fd5b505af1158015610c88573d6000803e3d6000fd5b5050505092915050565b6001600055565b600082815b81811015610cec57610ce2610cdb878784818110610cb857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686610ee5565b84906111ea565b9250600101610c9e565b508115610d9d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050505b509392505050565b6000610daf610e0c565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e796111fc565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120905090565b816104cd576104cd81611200565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633f9095b7856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f6f57600080fd5b505afa158015610f83573d6000803e3d6000fd5b505050506040513d6020811015610f9957600080fd5b5051600f0b1215610ff5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112b06022913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16634b820093836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561105e57600080fd5b505af1158015611072573d6000803e3d6000fd5b505050506040513d602081101561108857600080fd5b5050604080517f0940070700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000928616916309400707916024808301926020929190829003018186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209389168352929052205490915061116890829061126d565b915081156111e35773ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083209489168084529482529182902085905581519384528301849052805191927f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0929081900390910190a25b5092915050565b60008282016105f38482101583610ed7565b4690565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60006105f38383600160006112858484111583610ed7565b505090039056fe43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f722075736572476175676520646f6573206e6f74206578697374206f6e20436f6e74726f6c6c6572a264697066735822122000815edc8dad3ed51450e85d13f2e31c723b053d9dbff927d5b42138787dd47f64736f6c63430007010033", + "opcodes": "PUSH2 0x160 PUSH1 0x40 MSTORE PUSH32 0xC87351A089BBDC3B2B9299D2CE29F08FD982826B275B3642939A2F7FDD815380 PUSH2 0x140 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x14D5 CODESIZE SUB DUP1 PUSH2 0x14D5 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xF DUP2 MSTORE PUSH15 0x2130B630B731B2B91026B4B73A32B9 PUSH1 0x89 SHL DUP2 DUP7 ADD SWAP1 DUP2 MSTORE DUP3 MLOAD DUP1 DUP5 ADD DUP5 MSTORE PUSH1 0x1 DUP1 DUP3 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL DUP3 DUP10 ADD SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 SSTORE SWAP3 MLOAD SWAP1 SWAP2 KECCAK256 PUSH1 0x80 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0xA0 MSTORE PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP3 PUSH4 0xC0039699 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x129 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH1 0xE0 MSTORE SWAP3 DUP2 SHL DUP4 AND PUSH2 0x100 MSTORE SHL AND PUSH2 0x120 MSTORE PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x1307 PUSH2 0x1CE PUSH1 0x0 CODECOPY DUP1 PUSH2 0x8E4 MSTORE POP DUP1 PUSH2 0x637 MSTORE DUP1 PUSH2 0xEEA MSTORE POP DUP1 PUSH2 0xAE9 MSTORE DUP1 PUSH2 0xBE5 MSTORE DUP1 PUSH2 0xCF5 MSTORE POP DUP1 PUSH2 0x81E MSTORE POP DUP1 PUSH2 0xE10 MSTORE POP DUP1 PUSH2 0xE52 MSTORE POP DUP1 PUSH2 0xE31 MSTORE POP PUSH2 0x1307 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 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8B752BB0 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xC0039699 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xDD289D60 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xDD289D60 EQ PUSH2 0x47F JUMPI DUP1 PUSH4 0xE6DEC36F EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x4BA JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xC0039699 EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0xC6542794 EQ PUSH2 0x421 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x8B752BB0 EQ PUSH2 0x38E JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x3C9 JUMPI DUP1 PUSH4 0xA0990033 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0xA51E1904 EQ PUSH2 0x3FC JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x3C543BC6 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3C543BC6 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x58DE9ADE EQ PUSH2 0x2EF JUMPI DUP1 PUSH4 0x6A627842 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x7504A15D EQ PUSH2 0x353 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xDE54BA0 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x27F18AE3 EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0x397ADA21 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x3B9F7384 EQ PUSH2 0x21A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x4C2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x4D1 JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x526 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 POP SWAP2 POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x54B JUMP JUMPDEST PUSH2 0x2DB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5FA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2F7 PUSH2 0x635 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x336 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x659 JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x369 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x67C JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x719 JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x751 JUMP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x779 JUMP JUMPDEST PUSH2 0x2F7 PUSH2 0x81C JUMP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD ISZERO ISZERO SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x840 JUMP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x495 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xAA7 JUMP JUMPDEST PUSH2 0x2F7 PUSH2 0xAE7 JUMP JUMPDEST PUSH2 0x208 PUSH2 0xB0B JUMP JUMPDEST PUSH2 0x4CD DUP3 CALLER DUP4 PUSH2 0xB1A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x4D9 PUSH2 0xBB6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x51E JUMPI PUSH2 0x51C DUP3 DUP3 PUSH2 0xBCF JUMP JUMPDEST POP JUMPDEST PUSH2 0x4CD PUSH2 0xC92 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x530 PUSH2 0xBB6 JUMP JUMPDEST PUSH2 0x53B DUP4 DUP4 CALLER PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP PUSH2 0x545 PUSH2 0xC92 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x555 PUSH2 0xBB6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x5DE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x128D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5E9 DUP5 DUP5 DUP5 PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP PUSH2 0x5F3 PUSH2 0xC92 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x663 PUSH2 0xBB6 JUMP JUMPDEST PUSH2 0x66D DUP3 CALLER PUSH2 0xBCF JUMP JUMPDEST SWAP1 POP PUSH2 0x677 PUSH2 0xC92 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x686 PUSH2 0xBB6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x70F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x128D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x53B DUP4 DUP4 PUSH2 0xBCF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x781 PUSH2 0xBB6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0x810 JUMPI PUSH1 0x0 DUP3 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x79B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x7D7 JUMPI PUSH2 0x810 JUMP JUMPDEST PUSH2 0x807 DUP3 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x7E6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH2 0xBCF JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x784 JUMP JUMPDEST POP PUSH2 0x819 PUSH2 0xC92 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST TIMESTAMP DUP5 GT PUSH2 0x8AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5369676E61747572652065787069726564000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP2 MLOAD PUSH32 0x0 DUP2 DUP6 ADD MSTORE SWAP5 DUP13 AND DUP6 DUP4 ADD MSTORE DUP11 ISZERO ISZERO PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP1 DUP7 ADD DUP11 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP6 ADD SWAP1 SWAP2 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 KECCAK256 SWAP1 PUSH2 0x94B DUP3 PUSH2 0xDA5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xA24 JUMPI POP DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST PUSH2 0xA8F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964207369676E6174757265000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xA9A DUP12 DUP11 DUP13 PUSH2 0xB1A JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x819 SWAP1 DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x4C2 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB15 PUSH2 0xE0C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xA3FFB51320BBCA4E61E7423E3C97DD7BD7E31B6EA7429EB26EF92780E84572A0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0xBC8 PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xED7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBDB DUP4 DUP4 PUSH2 0xEE5 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x545 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCEC JUMPI PUSH2 0xCE2 PUSH2 0xCDB DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0xCB8 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH2 0xEE5 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x11EA JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0xC9E JUMP JUMPDEST POP DUP2 ISZERO PUSH2 0xD9D JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD98 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDAF PUSH2 0xE0C JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP 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 PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0xE79 PUSH2 0x11FC JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST DUP2 PUSH2 0x4CD JUMPI PUSH2 0x4CD DUP2 PUSH2 0x1200 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3F9095B7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xF SIGNEXTEND SLT ISZERO PUSH2 0xFF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x12B0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B820093 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x105E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x940070700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP7 AND SWAP2 PUSH4 0x9400707 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x110F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1168 SWAP1 DUP3 SWAP1 PUSH2 0x126D JUMP JUMPDEST SWAP2 POP DUP2 ISZERO PUSH2 0x11E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD SWAP4 DUP5 MSTORE DUP4 ADD DUP5 SWAP1 MSTORE DUP1 MLOAD SWAP2 SWAP3 PUSH32 0x9D228D69B5FDB8D273A2336F8FB8612D039631024EA9BF09C424A9503AA078F0 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x5F3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0xED7 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5F3 DUP4 DUP4 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1285 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0xED7 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP INVALID NUMBER PUSH2 0x6C6C PUSH6 0x72206E6F7420 PUSH2 0x6C6C PUSH16 0x77656420746F206D696E7420666F7220 PUSH22 0x736572476175676520646F6573206E6F742065786973 PUSH21 0x206F6E20436F6E74726F6C6C6572A2646970667358 0x22 SLT KECCAK256 STOP DUP2 0x5E 0xDC DUP14 0xAD RETURNDATACOPY 0xD5 EQ POP 0xE8 0x5D SGT CALLCODE 0xE3 SHR PUSH19 0x3B053D9DBFF927D5B42138787DD47F64736F6C PUSH4 0x43000701 STOP CALLER ", + "sourceMap": "1306:8409:47:-:0;;;1992:105;1934:163;;2195:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2195:242:47;;;;;;;;2020:280:39;;;;;;;;;;-1:-1:-1;;;2020:280:39;;;;;;;;;;;;;;;;;-1:-1:-1;;;2020:280:39;;;;;;-1:-1:-1;2175:22:44;;;;2100::39;;;;;2085:37;;2150:25;;;2132:43;;2198:95;2185:108;;2323:29:47;;-1:-1:-1;;;2323:29:47;;;;2195:242;;;;-1:-1:-1;;;;;2323:27:47;::::1;::::0;::::1;::::0;:29:::1;::::0;;::::1;::::0;;;;;;;:27;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;2323:29:47;-1:-1:-1;;;;;;2314:38:47::1;::::0;;;;;::::1;::::0;2362:24;;;;;::::1;::::0;2396:34;;::::1;::::0;1306:8409;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "3136": [ + { + "length": 32, + "start": 3633 + } + ], + "3138": [ + { + "length": 32, + "start": 3666 + } + ], + "3140": [ + { + "length": 32, + "start": 3600 + } + ], + "4614": [ + { + "length": 32, + "start": 2078 + } + ], + "4616": [ + { + "length": 32, + "start": 2793 + }, + { + "length": 32, + "start": 3045 + }, + { + "length": 32, + "start": 3317 + } + ], + "4618": [ + { + "length": 32, + "start": 1591 + }, + { + "length": 32, + "start": 3818 + } + ], + "4639": [ + { + "length": 32, + "start": 2276 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061011b5760003560e01c80638b752bb0116100b2578063c003969911610081578063dd289d6011610066578063dd289d601461047f578063e6dec36f146104b2578063ed24911d146104ba5761011b565b8063c003969914610419578063c6542794146104215761011b565b80638b752bb01461038e57806390193b7c146103c9578063a0990033146102a0578063a51e1904146103fc5761011b565b80633c543bc6116100ee5780633c543bc6146102a057806358de9ade146102ef5780636a627842146103205780637504a15d146103535761011b565b80630de54ba01461012057806327f18ae31461015d578063397ada21146101985780633b9f73841461021a575b600080fd5b61015b6004803603604081101561013657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156104c2565b005b61015b6004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166104d1565b610208600480360360208110156101ae57600080fd5b8101906020810181356401000000008111156101c957600080fd5b8201836020820111156101db57600080fd5b803590602001918460208302840111640100000000831117156101fd57600080fd5b509092509050610526565b60408051918252519081900360200190f35b6102086004803603604081101561023057600080fd5b81019060208101813564010000000081111561024b57600080fd5b82018360208201111561025d57600080fd5b8035906020019184602083028401116401000000008311171561027f57600080fd5b91935091503573ffffffffffffffffffffffffffffffffffffffff1661054b565b6102db600480360360408110156102b657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166105fa565b604080519115158252519081900360200190f35b6102f7610635565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102086004803603602081101561033657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610659565b6102086004803603604081101561036957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661067c565b610208600480360360408110156103a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610719565b610208600480360360208110156103df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610751565b61015b600480360361010081101561041357600080fd5b50610779565b6102f761081c565b61015b600480360360e081101561043757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101351515916040820135169060608101359060ff6080820135169060a08101359060c00135610840565b61015b6004803603602081101561049557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610aa7565b6102f7610ae7565b610208610b0b565b6104cd823383610b1a565b5050565b6104d9610bb6565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561051e5761051c8282610bcf565b505b6104cd610c92565b6000610530610bb6565b61053b838333610c99565b9050610545610c92565b92915050565b6000610555610bb6565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff166105de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061128d6023913960400191505060405180910390fd5b6105e9848484610c99565b90506105f3610c92565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610663610bb6565b61066d8233610bcf565b9050610677610c92565b919050565b6000610686610bb6565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff1661070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061128d6023913960400191505060405180910390fd5b61053b8383610bcf565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b610781610bb6565b60005b600881101561081057600082826008811061079b57fe5b602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107d757610810565b6108078282600881106107e657fe5b602002013573ffffffffffffffffffffffffffffffffffffffff1633610bcf565b50600101610784565b50610819610c92565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b4284116108ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5369676e61747572652065787069726564000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020908152604080832080546001810190915581517f000000000000000000000000000000000000000000000000000000000000000081850152948c16858301528a151560608601526080850181905260a08086018a90528251808703909101815260c0909501909152835193909101929092209061094b82610da5565b9050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156109a9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2457508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b610a9a8b8a8c610b1a565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604080832033845290915290205461081990829060ff16156104c2565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610b15610e0c565b905090565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155825190815291519293927fa3ffb51320bbca4e61e7423e3c97dd7bd7e31b6ea7429eb26ef92780e84572a09281900390910190a3505050565b610bc860026000541415610190610ed7565b6002600055565b6000610bdb8383610ee5565b90508015610545577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610c7457600080fd5b505af1158015610c88573d6000803e3d6000fd5b5050505092915050565b6001600055565b600082815b81811015610cec57610ce2610cdb878784818110610cb857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686610ee5565b84906111ea565b9250600101610c9e565b508115610d9d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d8457600080fd5b505af1158015610d98573d6000803e3d6000fd5b505050505b509392505050565b6000610daf610e0c565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610e796111fc565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120905090565b816104cd576104cd81611200565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633f9095b7856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f6f57600080fd5b505afa158015610f83573d6000803e3d6000fd5b505050506040513d6020811015610f9957600080fd5b5051600f0b1215610ff5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112b06022913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16634b820093836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561105e57600080fd5b505af1158015611072573d6000803e3d6000fd5b505050506040513d602081101561108857600080fd5b5050604080517f0940070700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000928616916309400707916024808301926020929190829003018186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d602081101561112557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209389168352929052205490915061116890829061126d565b915081156111e35773ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083209489168084529482529182902085905581519384528301849052805191927f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0929081900390910190a25b5092915050565b60008282016105f38482101583610ed7565b4690565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60006105f38383600160006112858484111583610ed7565b505090039056fe43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f722075736572476175676520646f6573206e6f74206578697374206f6e20436f6e74726f6c6c6572a264697066735822122000815edc8dad3ed51450e85d13f2e31c723b053d9dbff927d5b42138787dd47f64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8B752BB0 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xC0039699 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xDD289D60 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xDD289D60 EQ PUSH2 0x47F JUMPI DUP1 PUSH4 0xE6DEC36F EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x4BA JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xC0039699 EQ PUSH2 0x419 JUMPI DUP1 PUSH4 0xC6542794 EQ PUSH2 0x421 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x8B752BB0 EQ PUSH2 0x38E JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x3C9 JUMPI DUP1 PUSH4 0xA0990033 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0xA51E1904 EQ PUSH2 0x3FC JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x3C543BC6 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3C543BC6 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x58DE9ADE EQ PUSH2 0x2EF JUMPI DUP1 PUSH4 0x6A627842 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x7504A15D EQ PUSH2 0x353 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xDE54BA0 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x27F18AE3 EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0x397ADA21 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x3B9F7384 EQ PUSH2 0x21A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x4C2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x4D1 JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x526 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 POP SWAP2 POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x54B JUMP JUMPDEST PUSH2 0x2DB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5FA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2F7 PUSH2 0x635 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x336 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x659 JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x369 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x67C JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x719 JUMP JUMPDEST PUSH2 0x208 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x751 JUMP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x779 JUMP JUMPDEST PUSH2 0x2F7 PUSH2 0x81C JUMP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD ISZERO ISZERO SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x840 JUMP JUMPDEST PUSH2 0x15B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x495 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xAA7 JUMP JUMPDEST PUSH2 0x2F7 PUSH2 0xAE7 JUMP JUMPDEST PUSH2 0x208 PUSH2 0xB0B JUMP JUMPDEST PUSH2 0x4CD DUP3 CALLER DUP4 PUSH2 0xB1A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x4D9 PUSH2 0xBB6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x51E JUMPI PUSH2 0x51C DUP3 DUP3 PUSH2 0xBCF JUMP JUMPDEST POP JUMPDEST PUSH2 0x4CD PUSH2 0xC92 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x530 PUSH2 0xBB6 JUMP JUMPDEST PUSH2 0x53B DUP4 DUP4 CALLER PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP PUSH2 0x545 PUSH2 0xC92 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x555 PUSH2 0xBB6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x5DE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x128D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5E9 DUP5 DUP5 DUP5 PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP PUSH2 0x5F3 PUSH2 0xC92 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x663 PUSH2 0xBB6 JUMP JUMPDEST PUSH2 0x66D DUP3 CALLER PUSH2 0xBCF JUMP JUMPDEST SWAP1 POP PUSH2 0x677 PUSH2 0xC92 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x686 PUSH2 0xBB6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x70F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x128D PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x53B DUP4 DUP4 PUSH2 0xBCF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x781 PUSH2 0xBB6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0x810 JUMPI PUSH1 0x0 DUP3 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x79B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x7D7 JUMPI PUSH2 0x810 JUMP JUMPDEST PUSH2 0x807 DUP3 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x7E6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH2 0xBCF JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x784 JUMP JUMPDEST POP PUSH2 0x819 PUSH2 0xC92 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST TIMESTAMP DUP5 GT PUSH2 0x8AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5369676E61747572652065787069726564000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE DUP2 MLOAD PUSH32 0x0 DUP2 DUP6 ADD MSTORE SWAP5 DUP13 AND DUP6 DUP4 ADD MSTORE DUP11 ISZERO ISZERO PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP1 DUP7 ADD DUP11 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP6 ADD SWAP1 SWAP2 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 KECCAK256 SWAP1 PUSH2 0x94B DUP3 PUSH2 0xDA5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xA24 JUMPI POP DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST PUSH2 0xA8F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964207369676E6174757265000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xA9A DUP12 DUP11 DUP13 PUSH2 0xB1A JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x819 SWAP1 DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x4C2 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB15 PUSH2 0xE0C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0xA3FFB51320BBCA4E61E7423E3C97DD7BD7E31B6EA7429EB26EF92780E84572A0 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0xBC8 PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xED7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBDB DUP4 DUP4 PUSH2 0xEE5 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x545 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCEC JUMPI PUSH2 0xCE2 PUSH2 0xCDB DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0xCB8 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH2 0xEE5 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x11EA JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0xC9E JUMP JUMPDEST POP DUP2 ISZERO PUSH2 0xD9D JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD98 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDAF PUSH2 0xE0C JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP 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 PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0xE79 PUSH2 0x11FC JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST DUP2 PUSH2 0x4CD JUMPI PUSH2 0x4CD DUP2 PUSH2 0x1200 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x3F9095B7 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xF SIGNEXTEND SLT ISZERO PUSH2 0xFF5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x12B0 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B820093 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x105E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x940070700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP7 AND SWAP2 PUSH4 0x9400707 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x110F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1168 SWAP1 DUP3 SWAP1 PUSH2 0x126D JUMP JUMPDEST SWAP2 POP DUP2 ISZERO PUSH2 0x11E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD SWAP4 DUP5 MSTORE DUP4 ADD DUP5 SWAP1 MSTORE DUP1 MLOAD SWAP2 SWAP3 PUSH32 0x9D228D69B5FDB8D273A2336F8FB8612D039631024EA9BF09C424A9503AA078F0 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x5F3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0xED7 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5F3 DUP4 DUP4 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1285 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0xED7 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP INVALID NUMBER PUSH2 0x6C6C PUSH6 0x72206E6F7420 PUSH2 0x6C6C PUSH16 0x77656420746F206D696E7420666F7220 PUSH22 0x736572476175676520646F6573206E6F742065786973 PUSH21 0x206F6E20436F6E74726F6C6C6572A2646970667358 0x22 SLT KECCAK256 STOP DUP2 0x5E 0xDC DUP14 0xAD RETURNDATACOPY 0xD5 EQ POP 0xE8 0x5D SGT CALLCODE 0xE3 SHR PUSH19 0x3B053D9DBFF927D5B42138787DD47F64736F6C PUSH4 0x43000701 STOP CALLER ", + "sourceMap": "1306:8409:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5466:139;;;;;;;;;;;;;;;;-1:-1:-1;5466:139:47;;;;;;;;;;;:::i;:::-;;9294:178;;;;;;;;;;;;;;;;-1:-1:-1;9294:178:47;;;;;;;;;;;:::i;3731:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3731:150:47;;-1:-1:-1;3731:150:47;-1:-1:-1;3731:150:47;:::i;:::-;;;;;;;;;;;;;;;;4651:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4651:251:47;-1:-1:-1;4651:251:47;;;;:::i;5219:147::-;;;;;;;;;;;;;;;;-1:-1:-1;5219:147:47;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3147:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3440:129;;;;;;;;;;;;;;;;-1:-1:-1;3440:129:47;;;;:::i;4148:230::-;;;;;;;;;;;;;;;;-1:-1:-1;4148:230:47;;;;;;;;;;;:::i;4997:130::-;;;;;;;;;;;;;;;;-1:-1:-1;4997:130:47;;;;;;;;;;;:::i;2555:108::-;;;;;;;;;;;;;;;;-1:-1:-1;2555:108:47;;;;:::i;8765:262::-;;;;;;;;;;;;;;;;-1:-1:-1;8765:262:47;:::i;2753:98::-;;;:::i;5761:880::-;;;;;;;;;;;;;;;;-1:-1:-1;5761:880:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9571:142::-;;;;;;;;;;;;;;;;-1:-1:-1;9571:142:47;;;;:::i;2945:121::-;;;:::i;2443:106::-;;;:::i;5466:139::-;5550:48;5569:6;5577:10;5589:8;5550:18;:48::i;:::-;5466:139;;:::o;9294:178::-;2613:20:44;:18;:20::i;:::-;9401:10:47::1;9386:26;::::0;;;:14:::1;:26;::::0;;;;;;;::::1;:32:::0;::::1;::::0;;;;;;;;::::1;;9382:84;;;9434:21;9443:5;9450:4;9434:8;:21::i;:::-;;9382:84;2654:19:44::0;:17;:19::i;3731:150:47:-;3816:7;2613:20:44;:18;:20::i;:::-;3842:32:47::1;3855:6;;3863:10;3842:12;:32::i;:::-;3835:39;;2654:19:44::0;:17;:19::i;:::-;3731:150:47;;;;:::o;4651:251::-;4753:7;2613:20:44;:18;:20::i;:::-;4795:10:47::1;4780:26;::::0;;;:14:::1;:26;::::0;;;;;;;::::1;:32:::0;::::1;::::0;;;;;;;;::::1;;4772:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4869:26;4882:6;;4890:4;4869:12;:26::i;:::-;4862:33;;2654:19:44::0;:17;:19::i;:::-;4651:251:47;;;;;:::o;5219:147::-;5331:22;;;;5308:4;5331:22;;;:14;:22;;;;;;;;:28;;;;;;;;;;;;;;;5219:147::o;3147:120::-;3244:16;3147:120;:::o;3440:129::-;3509:7;2613:20:44;:18;:20::i;:::-;3535:27:47::1;3544:5;3551:10;3535:8;:27::i;:::-;3528:34;;2654:19:44::0;:17;:19::i;:::-;3440:129:47;;;:::o;4148:230::-;4234:7;2613:20:44;:18;:20::i;:::-;4276:10:47::1;4261:26;::::0;;;:14:::1;:26;::::0;;;;;;;::::1;:32:::0;::::1;::::0;;;;;;;;::::1;;4253:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4350:21;4359:5;4366:4;4350:8;:21::i;4997:130::-:0;5100:13;;;;5074:7;5100:13;;;:7;:13;;;;;;;;:20;;;;;;;;;;;;;4997:130::o;2555:108::-;2640:16;;2614:7;2640:16;;;:10;:16;;;;;;;2555:108::o;8765:262::-;2613:20:44;:18;:20::i;:::-;8858:9:47::1;8853:168;8877:1;8873;:5;8853:168;;;8924:1;8903:6:::0;8910:1;8903:9:::1;::::0;::::1;;;;;;;;;;;:23;;;8899:67;;;8946:5;;8899:67;8979:31;8988:6;8995:1;8988:9;;;;;;;;;;;;;8999:10;8979:8;:31::i;:::-;-1:-1:-1::0;8880:3:47::1;;8853:168;;;;2654:19:44::0;:17;:19::i;:::-;8765:262:47;:::o;2753:98::-;2838:6;2753:98;:::o;5761:880::-;6058:15;6047:8;:26;6039:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6122:16;;;;6106:13;6122:16;;;:10;:16;;;;;;;;:18;;;;;;;;6182:76;;6193:29;6182:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6172:87;;;;;;;;;;;6286:28;6172:87;6286:16;:28::i;:::-;6269:45;;6325:24;6352:26;6362:6;6370:1;6373;6376;6352:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6352:26:47;;;;;;-1:-1:-1;;6501:30:47;;;;;;;:58;;;6555:4;6535:24;;:16;:24;;;6501:58;6493:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6592:42;6611:6;6619:4;6625:8;6592:18;:42::i;:::-;5761:880;;;;;;;;;;;:::o;9571:142::-;9671:22;;;;;;;:14;:22;;;;;;;;9694:10;9671:34;;;;;;;;9644:62;;9662:6;;9671:34;;9670:35;9644:17;:62::i;2945:121::-;3048:11;2945:121;:::o;2443:106::-;2496:7;2522:20;:18;:20::i;:::-;2515:27;;2443:106;:::o;6647:223::-;6768:22;;;;;;;;:14;:22;;;;;;;;:28;;;;;;;;;;;;;:39;;;;;;;;;;;;;6822:41;;;;;;;6768:22;;:28;6822:41;;;;;;;;;;6647:223;;;:::o;2686:271:44:-;2809:48;2113:1;2818:7;;:19;;8984:3:20;2809:8:44;:48::i;:::-;2113:1;2932:7;:18;2686:271::o;6903:236:47:-;6968:20;7015:25;7028:5;7035:4;7015:12;:25::i;:::-;7000:40;-1:-1:-1;7054:16:47;;7050:83;;7086:11;:16;;;7103:4;7109:12;7086:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6903:236;;;;:::o;2963:208:44:-;2070:1;3142:7;:22;2963:208::o;7145:376:47:-;7226:20;7275:6;7226:20;7298:124;7322:6;7318:1;:10;7298:124;;;7364:47;7381:29;7394:6;;7401:1;7394:9;;;;;;;;;;;;;;;7405:4;7381:12;:29::i;:::-;7364:12;;:16;:47::i;:::-;7349:62;-1:-1:-1;7330:3:47;;7298:124;;;-1:-1:-1;7436:16:47;;7432:83;;7468:11;:16;;;7485:4;7491:12;7468:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7432:83;7145:376;;;;;;:::o;3199:183:39:-;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3302:73;;;;;;3295:80;;3199:183;;;:::o;2386:188::-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;7527:525:47:-;7596:20;7675:1;7636:16;:28;;;7665:5;7636:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7636:35:47;:40;;;;7628:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:5;7726:38;;;7765:4;7726:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7800:47:47;;;;;;:41;:47;;;;;;;;;7780:17;;7800:41;;;;;:47;;;;;7726:44;;7800:47;;;;;;;:41;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7800:47:47;7886:13;;;;;;;;:7;7800:47;7886:13;;;;;;;:20;;;;;;;;;;7800:47;;-1:-1:-1;7872:35:47;;7800:47;;7872:13;:35::i;:::-;7857:50;-1:-1:-1;7922:16:47;;7918:128;;7954:13;;;;;;;;:7;:13;;;;;;;;:20;;;;;;;;;;;;;:32;;;8005:30;;;;;;;;;;;;7954:13;;8005:30;;;;;;;;;;;7918:128;7527:525;;;;;:::o;966:167:46:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;3388:427:39:-;3790:9;;3765:44::o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14;1404:121:46;1462:7;1488:30;1492:1;1495;4370::20;1923:7:46;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:46;;;1816:206::o" + }, + "methodIdentifiers": { + "allowed_to_mint_for(address,address)": "a0990033", + "getBalancerToken()": "c0039699", + "getBalancerTokenAdmin()": "e6dec36f", + "getDomainSeparator()": "ed24911d", + "getGaugeController()": "58de9ade", + "getMinterApproval(address,address)": "3c543bc6", + "getNextNonce(address)": "90193b7c", + "mint(address)": "6a627842", + "mintFor(address,address)": "7504a15d", + "mintMany(address[])": "397ada21", + "mintManyFor(address[],address)": "3b9f7384", + "mint_for(address,address)": "27f18ae3", + "mint_many(address[8])": "a51e1904", + "minted(address,address)": "8b752bb0", + "setMinterApproval(address,bool)": "0de54ba0", + "setMinterApprovalWithSignature(address,bool,address,uint256,uint8,bytes32,bytes32)": "c6542794", + "toggle_approve_mint(address)": "dd289d60" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBalancerTokenAdmin\",\"name\":\"tokenAdmin\",\"type\":\"address\"},{\"internalType\":\"contract IGaugeController\",\"name\":\"gaugeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minted\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approval\",\"type\":\"bool\"}],\"name\":\"MinterApprovalSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"allowed_to_mint_for\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerTokenAdmin\",\"outputs\":[{\"internalType\":\"contract IBalancerTokenAdmin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeController\",\"outputs\":[{\"internalType\":\"contract IGaugeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getMinterApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"mintFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"gauges\",\"type\":\"address[]\"}],\"name\":\"mintMany\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"gauges\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"mintManyFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"mint_for\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[8]\",\"name\":\"gauges\",\"type\":\"address[8]\"}],\"name\":\"mint_many\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"minted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approval\",\"type\":\"bool\"}],\"name\":\"setMinterApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approval\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"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\":\"setMinterApprovalWithSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"toggle_approve_mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"mint(address)\":{\"params\":{\"gauge\":\"`LiquidityGauge` address to get mintable amount from\"}},\"mintFor(address,address)\":{\"details\":\"Only possible when `msg.sender` has been approved by `user` to mint on their behalf\",\"params\":{\"gauge\":\"`LiquidityGauge` address to get mintable amount from\",\"user\":\"Address to mint to\"}},\"mintMany(address[])\":{\"params\":{\"gauges\":\"List of `LiquidityGauge` addresses\"}},\"mintManyFor(address[],address)\":{\"details\":\"Only possible when `msg.sender` has been approved by `user` to mint on their behalf\",\"params\":{\"gauges\":\"List of `LiquidityGauge` addresses\",\"user\":\"Address to mint to\"}},\"mint_for(address,address)\":{\"details\":\"Only possible when `msg.sender` has been approved by `user` to mint on their behalf\",\"params\":{\"gauge\":\"`LiquidityGauge` address to get mintable amount from\",\"user\":\"Address to mint to\"}},\"mint_many(address[8])\":{\"details\":\"This function is not recommended as `mintMany()` is more flexible and gas efficient\",\"params\":{\"gauges\":\"List of `LiquidityGauge` addresses\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowed_to_mint_for(address,address)\":{\"notice\":\"Whether `minter` is approved to mint tokens for `user`\"},\"getBalancerToken()\":{\"notice\":\"Returns the address of the Balancer Governance Token\"},\"getBalancerTokenAdmin()\":{\"notice\":\"Returns the address of the Balancer Token Admin contract\"},\"getGaugeController()\":{\"notice\":\"Returns the address of the Gauge Controller\"},\"getMinterApproval(address,address)\":{\"notice\":\"Whether `minter` is approved to mint tokens for `user`\"},\"mint(address)\":{\"notice\":\"Mint everything which belongs to `msg.sender` and send to them\"},\"mintFor(address,address)\":{\"notice\":\"Mint tokens for `user`\"},\"mintMany(address[])\":{\"notice\":\"Mint everything which belongs to `msg.sender` across multiple gauges\"},\"mintManyFor(address[],address)\":{\"notice\":\"Mint tokens for `user` across multiple gauges\"},\"mint_for(address,address)\":{\"notice\":\"Mint tokens for `user`\"},\"mint_many(address[8])\":{\"notice\":\"Mint everything which belongs to `msg.sender` across multiple gauges\"},\"minted(address,address)\":{\"notice\":\"The total number of tokens minted for `user` from `gauge`\"},\"setMinterApproval(address,bool)\":{\"notice\":\"Set whether `minter` is approved to mint tokens on your behalf\"},\"setMinterApprovalWithSignature(address,bool,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing them.\"},\"toggle_approve_mint(address)\":{\"notice\":\"Toggle whether `minter` is approved to mint tokens for `user`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerMinter.sol\":\"BalancerMinter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/BalancerMinter.sol\":{\"keccak256\":\"0xd768c16e06761ca8af0120e8383808043b064914416d4007f572e68a924af4a4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0cc22f713c65b4e1b9bdcd742fc8404ba896a4a7b8919a5e43073f2f9e4439be\",\"dweb:/ipfs/QmSX1Un9jhZhQHPKPc4MQmD8dN5MYi8qXVUbhuU4cupPQr\"]}},\"version\":1}" + } + }, + "contracts/BalancerTokenAdmin.sol": { + "BalancerTokenAdmin": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IBalancerToken", + "name": "balancerToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "supply", + "type": "uint256" + } + ], + "name": "MiningParametersUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "INITIAL_RATE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RATE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RATE_REDUCTION_COEFFICIENT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RATE_REDUCTION_TIME", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "available_supply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "futureEpochTimeWrite", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "future_epoch_time_write", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAvailableSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerToken", + "outputs": [ + { + "internalType": "contract IBalancerToken", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFutureEpochTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getInflationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMiningEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStartEpochSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStartEpochTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + } + ], + "name": "mintableInTimeframe", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + } + ], + "name": "mintable_in_timeframe", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "snapshot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "startEpochTimeWrite", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "start_epoch_time_write", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateMiningParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "update_mining_parameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60e060405260001960025534801561001657600080fd5b5060405161204f38038061204f8339818101604052604081101561003957600080fd5b508051602090910151306080526001600160601b0319606092831b811660a0526001600055911b1660c05260805160a05160601c60c05160601c611f3c610113600039806103d052806104a6528061055e528061062052806106d2528061077e5280610874528061093052806109935280610a3f5280610b355280610bf15280610c545280610d015280610dc55280610ecd5280610f2e528061106852806111625280611211528061130252806113f35280611562528061163752806117a552806118b952508061177952508061170c5250611f3c6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c8063851c1bb3116100f9578063b87b561611610097578063c3b03fa811610071578063c3b03fa8146102fb578063cb626ae21461031e578063d43b40fa1461031e578063d725a9ca146102fb576101b9565b8063b87b5616146102eb578063c0039699146102f3578063c167d1cd146101f2576101b9565b8063a228bced116100d3578063a228bced146102db578063aaabadc5146102e3578063adc4cf43146102db578063b26b238e146101fa576101b9565b8063851c1bb3146102635780638d928af8146102a25780639711715a146102d3576101b9565b80632c4e722e116101665780634dbac733116101405780634dbac7331461024b57806355f74176146102535780637efad8e01461025b578063819df2c414610202576101b9565b80632c4e722e1461020257806340c10f191461020a5780634d2fa41314610243576101b9565b806321609bbf1161019757806321609bbf146101ea57806324f92a25146101f2578063277dbafb146101fa576101b9565b8063087905c9146101be5780630dfbdce4146101d85780630f15f4c0146101e0575b600080fd5b6101c6610326565b60408051918252519081900360200190f35b6101c661032d565b6101e8610346565b005b6101c66114f9565b6101c6611505565b6101c661150f565b6101c6611527565b6101e86004803603604081101561022057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561152d565b6101c66116e2565b6101c66116e8565b6101c66116f4565b6101c66116fa565b6101c66004803603602081101561027957600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016611706565b6102aa611777565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e861179b565b6101c6611825565b6102aa61182f565b6101c66118af565b6102aa6118b7565b6101c66004803603604081101561031157600080fd5b50803590602001356118db565b6101e86118ee565b6001545b90565b600254600090610341906301e1338061195b565b905090565b61034e61196d565b610356611986565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600254146103cc576040805162461bcd60e51b815260206004820152601160248201527f416c726561647920616374697661746564000000000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d53913936040518163ffffffff1660e01b815260040160206040518083038186803b15801561043457600080fd5b505afa158015610448573d6000803e3d6000fd5b505050506040513d602081101561045e57600080fd5b5051604080517f7028e2cd000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691637028e2cd916004808301926020929190829003018186803b1580156104ec57600080fd5b505afa158015610500573d6000803e3d6000fd5b505050506040513d602081101561051657600080fd5b5051604080517fa217fddf000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163a217fddf916004808301926020929190829003018186803b1580156105a457600080fd5b505afa1580156105b8573d6000803e3d6000fd5b505050506040513d60208110156105ce57600080fd5b5051604080517f91d1485400000000000000000000000000000000000000000000000000000000815260048101839052306024820152905191925073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916391d1485491604480820192602092909190829003018186803b15801561066757600080fd5b505afa15801561067b573d6000803e3d6000fd5b505050506040513d602081101561069157600080fd5b50516106ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180611e6e6022913960400191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561074157600080fd5b505afa158015610755573d6000803e3d6000fd5b505050506040513d602081101561076b57600080fd5b5051905060005b818110156108e25760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639010d07c8760006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d602081101561082057600080fd5b5051604080517fd547741f0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff808416602483015291519293507f00000000000000000000000000000000000000000000000000000000000000009091169163d547741f9160448082019260009290919082900301818387803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b5050505050806001019050610772565b50604080517f2f2ff15d00000000000000000000000000000000000000000000000000000000815260048101869052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691632f2ff15d91604480830192600092919082900301818387803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b5050505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a0257600080fd5b505afa158015610a16573d6000803e3d6000fd5b505050506040513d6020811015610a2c57600080fd5b5051905060005b81811015610ba35760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639010d07c8760006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d6020811015610ae157600080fd5b5051604080517fd547741f0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff808416602483015291519293507f00000000000000000000000000000000000000000000000000000000000000009091169163d547741f9160448082019260009290919082900301818387803b158015610b7f57600080fd5b505af1158015610b93573d6000803e3d6000fd5b5050505050806001019050610a33565b50604080517f2f2ff15d00000000000000000000000000000000000000000000000000000000815260048101869052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691632f2ff15d91604480830192600092919082900301818387803b158015610c3857600080fd5b505af1158015610c4c573d6000803e3d6000fd5b5050505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610cc357600080fd5b505afa158015610cd7573d6000803e3d6000fd5b505050506040513d6020811015610ced57600080fd5b505190506000805b82811015610e7f5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639010d07c88856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610d7857600080fd5b505afa158015610d8c573d6000803e3d6000fd5b505050506040513d6020811015610da257600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81163014610e71577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d547741f88836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b50505050610e76565b600192505b50600101610cf5565b50604080517fd547741f00000000000000000000000000000000000000000000000000000000815260048101879052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d547741f91604480830192600092919082900301818387803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f9d57600080fd5b505afa158015610fb1573d6000803e3d6000fd5b505050506040513d6020811015610fc757600080fd5b50511561101b576040805162461bcd60e51b815260206004820181905260248201527f416464726573732065786973747320776974682061646d696e20726967687473604482015290519081900360640190fd5b604080517f91d1485400000000000000000000000000000000000000000000000000000000815260048101899052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916391d14854916044808301926020929190829003018186803b1580156110ae57600080fd5b505afa1580156110c2573d6000803e3d6000fd5b505050506040513d60208110156110d857600080fd5b50516111155760405162461bcd60e51b8152600401808060200182810382526022815260200180611ee56022913960400191505060405180910390fd5b604080517f91d1485400000000000000000000000000000000000000000000000000000000815260048101889052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916391d14854916044808301926020929190829003018186803b1580156111a857600080fd5b505afa1580156111bc573d6000803e3d6000fd5b505050506040513d60208110156111d257600080fd5b505161120f5760405162461bcd60e51b8152600401808060200182810382526027815260200180611e906027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561128057600080fd5b505afa158015611294573d6000803e3d6000fd5b505050506040513d60208110156112aa57600080fd5b5051600114611300576040805162461bcd60e51b815260206004820152601660248201527f4d756c7469706c65206d696e7465727320657869737400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561137157600080fd5b505afa158015611385573d6000803e3d6000fd5b505050506040513d602081101561139b57600080fd5b50516001146113f1576040805162461bcd60e51b815260206004820152601b60248201527f4d756c7469706c6520736e617073686f74746572732065786973740000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d602081101561148157600080fd5b50516003554260025562093a80691eb4773b6d1318a00000046004557fa96ad9a0b81b29565fbe231714a2f2c152b759e603c91bf87144a3f61944f0a562093a80691eb4773b6d1318a000006003546040805193909204835260208301528051918290030190a1505050505050506114f76119cf565b565b671080e992061ab30081565b60006103416119d6565b60006103416301e13380611521611a10565b9061195b565b60045490565b611535611986565b600254611546906301e1338061195b565b421061155457611554611a3c565b61155c6119d6565b6115f8827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c657600080fd5b505afa1580156115da573d6000803e3d6000fd5b505050506040513d60208110156115f057600080fd5b50519061195b565b11156116355760405162461bcd60e51b815260040180806020018281038252602e815260200180611eb7602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050505050565b60025490565b670353c226d6c6f58081565b60035490565b670de0b6b3a764000081565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6117a3611986565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639711715a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b50505050565b6000610341611a10565b6000611839611777565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561187e57600080fd5b505afa158015611892573d6000803e3d6000fd5b505050506040513d60208110156118a857600080fd5b5051905090565b6301e1338081565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006118e78383611af8565b9392505050565b6002546118ff906301e1338061195b565b421015611953576040805162461bcd60e51b815260206004820152601a60248201527f45706f636820686173206e6f742066696e697368656420796574000000000000604482015290519081900360640190fd5b6114f7611a3c565b60008282016118e78482101583611ce5565b61197f60026000541415610190611ce5565b6002600055565b60006119b56000357fffffffff0000000000000000000000000000000000000000000000000000000016611706565b90506119cc6119c48233611cf7565b610191611ce5565b50565b6001600055565b6000806119fa6004546119f460025442611dc090919063ffffffff16565b90611dd6565b600354909150611a0a908261195b565b91505090565b600254600090611a24816301e1338061195b565b421061034157611a32611a3c565b505060025461032a565b6004546000611a5b611a52836301e13380611dd6565b6003549061195b565b9050611a81671080e992061ab300611a7b84670de0b6b3a7640000611dd6565b90611dfa565b9150611a986001805461195b90919063ffffffff16565b600155600254611aac906301e1338061195b565b60025560048290556003819055604080518381526020810183905281517fa96ad9a0b81b29565fbe231714a2f2c152b759e603c91bf87144a3f61944f0a5929181900390910190a15050565b600081831115611b4f576040805162461bcd60e51b815260206004820152600b60248201527f7374617274203e20656e64000000000000000000000000000000000000000000604482015290519081900360640190fd5b600254600454611b63826301e1338061195b565b841115611b9b57611b78826301e1338061195b565b9150611b98671080e992061ab300611a7b83670de0b6b3a7640000611dd6565b90505b611ba9826301e1338061195b565b841115611bfd576040805162461bcd60e51b815260206004820152601160248201527f746f6f2066617220696e20667574757265000000000000000000000000000000604482015290519081900360640190fd5b6000805b6103e7811015611cdb57838610611c915785611c21856301e1338061195b565b811115611c3957611c36856301e1338061195b565b90505b87611c48866301e1338061195b565b8110611c55575050611cdb565b85811015611c605750845b611c7e611c77611c708484611dc0565b8790611dd6565b859061195b565b9350858910611c8e575050611cdb565b50505b611c9f846301e13380611dc0565b9350611cbf670de0b6b3a7640000611a7b85671080e992061ab300611dd6565b9250670353c226d6c6f580831115611cd357fe5b600101611c01565b5095945050505050565b81611cf357611cf381611e1a565b5050565b6000611d0161182f565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b158015611d8d57600080fd5b505afa158015611da1573d6000803e3d6000fd5b505050506040513d6020811015611db757600080fd5b50519392505050565b6000611dd0838311156001611ce5565b50900390565b60008282026118e7841580611df3575083858381611df057fe5b04145b6003611ce5565b6000611e098215156004611ce5565b818381611e1257fe5b049392505050565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206973206e6f7420616e2061646d696e42616c616e636572546f6b656e41646d696e206973206e6f74206120736e617073686f747465724d696e7420616d6f756e7420657863656564732072656d61696e696e6720617661696c61626c6520737570706c7942616c616e636572546f6b656e41646d696e206973206e6f742061206d696e746572a2646970667358221220a459c85912fdce627684d21527776eefc200f8c541a4e17a37a3c844fdf3837264736f6c63430007010033", + "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 NOT PUSH1 0x2 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x204F CODESIZE SUB DUP1 PUSH2 0x204F DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD ADDRESS PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x0 SSTORE SWAP2 SHL AND PUSH1 0xC0 MSTORE PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH2 0x1F3C PUSH2 0x113 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x3D0 MSTORE DUP1 PUSH2 0x4A6 MSTORE DUP1 PUSH2 0x55E MSTORE DUP1 PUSH2 0x620 MSTORE DUP1 PUSH2 0x6D2 MSTORE DUP1 PUSH2 0x77E MSTORE DUP1 PUSH2 0x874 MSTORE DUP1 PUSH2 0x930 MSTORE DUP1 PUSH2 0x993 MSTORE DUP1 PUSH2 0xA3F MSTORE DUP1 PUSH2 0xB35 MSTORE DUP1 PUSH2 0xBF1 MSTORE DUP1 PUSH2 0xC54 MSTORE DUP1 PUSH2 0xD01 MSTORE DUP1 PUSH2 0xDC5 MSTORE DUP1 PUSH2 0xECD MSTORE DUP1 PUSH2 0xF2E MSTORE DUP1 PUSH2 0x1068 MSTORE DUP1 PUSH2 0x1162 MSTORE DUP1 PUSH2 0x1211 MSTORE DUP1 PUSH2 0x1302 MSTORE DUP1 PUSH2 0x13F3 MSTORE DUP1 PUSH2 0x1562 MSTORE DUP1 PUSH2 0x1637 MSTORE DUP1 PUSH2 0x17A5 MSTORE DUP1 PUSH2 0x18B9 MSTORE POP DUP1 PUSH2 0x1779 MSTORE POP DUP1 PUSH2 0x170C MSTORE POP PUSH2 0x1F3C 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 0x1B9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x851C1BB3 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xB87B5616 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xC3B03FA8 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC3B03FA8 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0xCB626AE2 EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0xD43B40FA EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0xD725A9CA EQ PUSH2 0x2FB JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0xB87B5616 EQ PUSH2 0x2EB JUMPI DUP1 PUSH4 0xC0039699 EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0xC167D1CD EQ PUSH2 0x1F2 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0xA228BCED GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0xA228BCED EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0xADC4CF43 EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0xB26B238E EQ PUSH2 0x1FA JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x9711715A EQ PUSH2 0x2D3 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x2C4E722E GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x4DBAC733 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x4DBAC733 EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0x55F74176 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x7EFAD8E0 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x819DF2C4 EQ PUSH2 0x202 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x2C4E722E EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x4D2FA413 EQ PUSH2 0x243 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x21609BBF GT PUSH2 0x197 JUMPI DUP1 PUSH4 0x21609BBF EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x24F92A25 EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0x277DBAFB EQ PUSH2 0x1FA JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x87905C9 EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0xDFBDCE4 EQ PUSH2 0x1D8 JUMPI DUP1 PUSH4 0xF15F4C0 EQ PUSH2 0x1E0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C6 PUSH2 0x326 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C6 PUSH2 0x32D JUMP JUMPDEST PUSH2 0x1E8 PUSH2 0x346 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1C6 PUSH2 0x14F9 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x1505 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x150F JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x1527 JUMP JUMPDEST PUSH2 0x1E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x152D JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16E2 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16E8 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16F4 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16FA JUMP JUMPDEST PUSH2 0x1C6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1706 JUMP JUMPDEST PUSH2 0x2AA PUSH2 0x1777 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E8 PUSH2 0x179B JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x1825 JUMP JUMPDEST PUSH2 0x2AA PUSH2 0x182F JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x18AF JUMP JUMPDEST PUSH2 0x2AA PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x1C6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x18DB JUMP JUMPDEST PUSH2 0x1E8 PUSH2 0x18EE JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x341 SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x34E PUSH2 0x196D JUMP JUMPDEST PUSH2 0x356 PUSH2 0x1986 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x2 SLOAD EQ PUSH2 0x3CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920616374697661746564000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD5391393 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x448 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x7028E2CD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x7028E2CD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x500 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xA217FDDF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x91D14854 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x67B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x6CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1E6E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x741 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x755 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x76B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9010D07C DUP8 PUSH1 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x80A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x820 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD547741F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0xD547741F SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x772 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x2F2FF15D SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x977 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBA3 JUMPI PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9010D07C DUP8 PUSH1 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD547741F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0xD547741F SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0xA33 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x2F2FF15D SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xE7F JUMPI PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9010D07C DUP9 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ADDRESS EQ PUSH2 0xE71 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD547741F DUP9 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xE76 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xCF5 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0xD547741F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD547741F SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x101B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573732065786973747320776974682061646D696E20726967687473 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x91D14854 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1115 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EE5 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x91D14854 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1E90 PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP9 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1294 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 EQ PUSH2 0x1300 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D756C7469706C65206D696E7465727320657869737400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1385 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x139B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 EQ PUSH2 0x13F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D756C7469706C6520736E617073686F74746572732065786973740000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1457 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x146B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE TIMESTAMP PUSH1 0x2 SSTORE PUSH3 0x93A80 PUSH10 0x1EB4773B6D1318A00000 DIV PUSH1 0x4 SSTORE PUSH32 0xA96AD9A0B81B29565FBE231714A2F2C152B759E603C91BF87144A3F61944F0A5 PUSH3 0x93A80 PUSH10 0x1EB4773B6D1318A00000 PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 SWAP1 SWAP3 DIV DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP POP POP POP POP POP PUSH2 0x14F7 PUSH2 0x19CF JUMP JUMPDEST JUMP JUMPDEST PUSH8 0x1080E992061AB300 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x341 PUSH2 0x19D6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x341 PUSH4 0x1E13380 PUSH2 0x1521 PUSH2 0x1A10 JUMP JUMPDEST SWAP1 PUSH2 0x195B JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1535 PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1546 SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1554 JUMPI PUSH2 0x1554 PUSH2 0x1A3C JUMP JUMPDEST PUSH2 0x155C PUSH2 0x19D6 JUMP JUMPDEST PUSH2 0x15F8 DUP3 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x15F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH2 0x195B JUMP JUMPDEST GT ISZERO PUSH2 0x1635 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EB7 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH8 0x353C226D6C6F580 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x17A3 PUSH2 0x1986 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9711715A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x180B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x181F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x341 PUSH2 0x1A10 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1839 PUSH2 0x1777 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x187E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH4 0x1E13380 DUP2 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18E7 DUP4 DUP4 PUSH2 0x1AF8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x18FF SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x1953 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45706F636820686173206E6F742066696E697368656420796574000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x14F7 PUSH2 0x1A3C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x18E7 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x197F PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19B5 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1706 JUMP JUMPDEST SWAP1 POP PUSH2 0x19CC PUSH2 0x19C4 DUP3 CALLER PUSH2 0x1CF7 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1CE5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x19FA PUSH1 0x4 SLOAD PUSH2 0x19F4 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1DC0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x1DD6 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 SWAP2 POP PUSH2 0x1A0A SWAP1 DUP3 PUSH2 0x195B JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1A24 DUP2 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST TIMESTAMP LT PUSH2 0x341 JUMPI PUSH2 0x1A32 PUSH2 0x1A3C JUMP JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH2 0x32A JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 PUSH2 0x1A5B PUSH2 0x1A52 DUP4 PUSH4 0x1E13380 PUSH2 0x1DD6 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP PUSH2 0x1A81 PUSH8 0x1080E992061AB300 PUSH2 0x1A7B DUP5 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1DD6 JUMP JUMPDEST SWAP1 PUSH2 0x1DFA JUMP JUMPDEST SWAP2 POP PUSH2 0x1A98 PUSH1 0x1 DUP1 SLOAD PUSH2 0x195B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH1 0x2 SLOAD PUSH2 0x1AAC SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x4 DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xA96AD9A0B81B29565FBE231714A2F2C152B759E603C91BF87144A3F61944F0A5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x1B4F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x7374617274203E20656E64000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x4 SLOAD PUSH2 0x1B63 DUP3 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x1B9B JUMPI PUSH2 0x1B78 DUP3 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST SWAP2 POP PUSH2 0x1B98 PUSH8 0x1080E992061AB300 PUSH2 0x1A7B DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1DD6 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1BA9 DUP3 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x1BFD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F6F2066617220696E20667574757265000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH2 0x3E7 DUP2 LT ISZERO PUSH2 0x1CDB JUMPI DUP4 DUP7 LT PUSH2 0x1C91 JUMPI DUP6 PUSH2 0x1C21 DUP6 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x1C39 JUMPI PUSH2 0x1C36 DUP6 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP8 PUSH2 0x1C48 DUP7 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP2 LT PUSH2 0x1C55 JUMPI POP POP PUSH2 0x1CDB JUMP JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1C60 JUMPI POP DUP5 JUMPDEST PUSH2 0x1C7E PUSH2 0x1C77 PUSH2 0x1C70 DUP5 DUP5 PUSH2 0x1DC0 JUMP JUMPDEST DUP8 SWAP1 PUSH2 0x1DD6 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP4 POP DUP6 DUP10 LT PUSH2 0x1C8E JUMPI POP POP PUSH2 0x1CDB JUMP JUMPDEST POP POP JUMPDEST PUSH2 0x1C9F DUP5 PUSH4 0x1E13380 PUSH2 0x1DC0 JUMP JUMPDEST SWAP4 POP PUSH2 0x1CBF PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A7B DUP6 PUSH8 0x1080E992061AB300 PUSH2 0x1DD6 JUMP JUMPDEST SWAP3 POP PUSH8 0x353C226D6C6F580 DUP4 GT ISZERO PUSH2 0x1CD3 JUMPI INVALID JUMPDEST PUSH1 0x1 ADD PUSH2 0x1C01 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x1CF3 JUMPI PUSH2 0x1CF3 DUP2 PUSH2 0x1E1A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D01 PUSH2 0x182F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DD0 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x1CE5 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x18E7 DUP5 ISZERO DUP1 PUSH2 0x1DF3 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1DF0 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E09 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1CE5 JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x1E12 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E2069 PUSH20 0x206E6F7420616E2061646D696E42616C616E6365 PUSH19 0x546F6B656E41646D696E206973206E6F742061 KECCAK256 PUSH20 0x6E617073686F747465724D696E7420616D6F756E PUSH21 0x20657863656564732072656D61696E696E67206176 PUSH2 0x696C PUSH2 0x626C PUSH6 0x20737570706C PUSH26 0x42616C616E636572546F6B656E41646D696E206973206E6F7420 PUSH2 0x206D PUSH10 0x6E746572A26469706673 PC 0x22 SLT KECCAK256 LOG4 MSIZE 0xC8 MSIZE SLT REVERT 0xCE PUSH3 0x7684D2 ISZERO 0x27 PUSH24 0x6EEFC200F8C541A4E17A37A3C844FDF3837264736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1910:14868:48:-:0;;;-1:-1:-1;;2619:51:48;;2794:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2794:134:48;;;;;;;1143:4:35;2049:46:33;;-1:-1:-1;;;;;;1162:14:35::1;::::0;;;;;::::1;::::0;2070:1:44;1119:31:35;2175:22:44;2891:30:48;;;::::1;::::0;1910:14868;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2297": [ + { + "length": 32, + "start": 5900 + } + ], + "2486": [ + { + "length": 32, + "start": 6009 + } + ], + "5276": [ + { + "length": 32, + "start": 976 + }, + { + "length": 32, + "start": 1190 + }, + { + "length": 32, + "start": 1374 + }, + { + "length": 32, + "start": 1568 + }, + { + "length": 32, + "start": 1746 + }, + { + "length": 32, + "start": 1918 + }, + { + "length": 32, + "start": 2164 + }, + { + "length": 32, + "start": 2352 + }, + { + "length": 32, + "start": 2451 + }, + { + "length": 32, + "start": 2623 + }, + { + "length": 32, + "start": 2869 + }, + { + "length": 32, + "start": 3057 + }, + { + "length": 32, + "start": 3156 + }, + { + "length": 32, + "start": 3329 + }, + { + "length": 32, + "start": 3525 + }, + { + "length": 32, + "start": 3789 + }, + { + "length": 32, + "start": 3886 + }, + { + "length": 32, + "start": 4200 + }, + { + "length": 32, + "start": 4450 + }, + { + "length": 32, + "start": 4625 + }, + { + "length": 32, + "start": 4866 + }, + { + "length": 32, + "start": 5107 + }, + { + "length": 32, + "start": 5474 + }, + { + "length": 32, + "start": 5687 + }, + { + "length": 32, + "start": 6053 + }, + { + "length": 32, + "start": 6329 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101b95760003560e01c8063851c1bb3116100f9578063b87b561611610097578063c3b03fa811610071578063c3b03fa8146102fb578063cb626ae21461031e578063d43b40fa1461031e578063d725a9ca146102fb576101b9565b8063b87b5616146102eb578063c0039699146102f3578063c167d1cd146101f2576101b9565b8063a228bced116100d3578063a228bced146102db578063aaabadc5146102e3578063adc4cf43146102db578063b26b238e146101fa576101b9565b8063851c1bb3146102635780638d928af8146102a25780639711715a146102d3576101b9565b80632c4e722e116101665780634dbac733116101405780634dbac7331461024b57806355f74176146102535780637efad8e01461025b578063819df2c414610202576101b9565b80632c4e722e1461020257806340c10f191461020a5780634d2fa41314610243576101b9565b806321609bbf1161019757806321609bbf146101ea57806324f92a25146101f2578063277dbafb146101fa576101b9565b8063087905c9146101be5780630dfbdce4146101d85780630f15f4c0146101e0575b600080fd5b6101c6610326565b60408051918252519081900360200190f35b6101c661032d565b6101e8610346565b005b6101c66114f9565b6101c6611505565b6101c661150f565b6101c6611527565b6101e86004803603604081101561022057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561152d565b6101c66116e2565b6101c66116e8565b6101c66116f4565b6101c66116fa565b6101c66004803603602081101561027957600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016611706565b6102aa611777565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e861179b565b6101c6611825565b6102aa61182f565b6101c66118af565b6102aa6118b7565b6101c66004803603604081101561031157600080fd5b50803590602001356118db565b6101e86118ee565b6001545b90565b600254600090610341906301e1338061195b565b905090565b61034e61196d565b610356611986565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600254146103cc576040805162461bcd60e51b815260206004820152601160248201527f416c726561647920616374697661746564000000000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d53913936040518163ffffffff1660e01b815260040160206040518083038186803b15801561043457600080fd5b505afa158015610448573d6000803e3d6000fd5b505050506040513d602081101561045e57600080fd5b5051604080517f7028e2cd000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691637028e2cd916004808301926020929190829003018186803b1580156104ec57600080fd5b505afa158015610500573d6000803e3d6000fd5b505050506040513d602081101561051657600080fd5b5051604080517fa217fddf000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163a217fddf916004808301926020929190829003018186803b1580156105a457600080fd5b505afa1580156105b8573d6000803e3d6000fd5b505050506040513d60208110156105ce57600080fd5b5051604080517f91d1485400000000000000000000000000000000000000000000000000000000815260048101839052306024820152905191925073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916391d1485491604480820192602092909190829003018186803b15801561066757600080fd5b505afa15801561067b573d6000803e3d6000fd5b505050506040513d602081101561069157600080fd5b50516106ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180611e6e6022913960400191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561074157600080fd5b505afa158015610755573d6000803e3d6000fd5b505050506040513d602081101561076b57600080fd5b5051905060005b818110156108e25760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639010d07c8760006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d602081101561082057600080fd5b5051604080517fd547741f0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff808416602483015291519293507f00000000000000000000000000000000000000000000000000000000000000009091169163d547741f9160448082019260009290919082900301818387803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b5050505050806001019050610772565b50604080517f2f2ff15d00000000000000000000000000000000000000000000000000000000815260048101869052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691632f2ff15d91604480830192600092919082900301818387803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b5050505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a0257600080fd5b505afa158015610a16573d6000803e3d6000fd5b505050506040513d6020811015610a2c57600080fd5b5051905060005b81811015610ba35760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639010d07c8760006040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d6020811015610ae157600080fd5b5051604080517fd547741f0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff808416602483015291519293507f00000000000000000000000000000000000000000000000000000000000000009091169163d547741f9160448082019260009290919082900301818387803b158015610b7f57600080fd5b505af1158015610b93573d6000803e3d6000fd5b5050505050806001019050610a33565b50604080517f2f2ff15d00000000000000000000000000000000000000000000000000000000815260048101869052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691632f2ff15d91604480830192600092919082900301818387803b158015610c3857600080fd5b505af1158015610c4c573d6000803e3d6000fd5b5050505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610cc357600080fd5b505afa158015610cd7573d6000803e3d6000fd5b505050506040513d6020811015610ced57600080fd5b505190506000805b82811015610e7f5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639010d07c88856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015610d7857600080fd5b505afa158015610d8c573d6000803e3d6000fd5b505050506040513d6020811015610da257600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81163014610e71577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d547741f88836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b50505050610e76565b600192505b50600101610cf5565b50604080517fd547741f00000000000000000000000000000000000000000000000000000000815260048101879052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d547741f91604480830192600092919082900301818387803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f9d57600080fd5b505afa158015610fb1573d6000803e3d6000fd5b505050506040513d6020811015610fc757600080fd5b50511561101b576040805162461bcd60e51b815260206004820181905260248201527f416464726573732065786973747320776974682061646d696e20726967687473604482015290519081900360640190fd5b604080517f91d1485400000000000000000000000000000000000000000000000000000000815260048101899052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916391d14854916044808301926020929190829003018186803b1580156110ae57600080fd5b505afa1580156110c2573d6000803e3d6000fd5b505050506040513d60208110156110d857600080fd5b50516111155760405162461bcd60e51b8152600401808060200182810382526022815260200180611ee56022913960400191505060405180910390fd5b604080517f91d1485400000000000000000000000000000000000000000000000000000000815260048101889052306024820152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916391d14854916044808301926020929190829003018186803b1580156111a857600080fd5b505afa1580156111bc573d6000803e3d6000fd5b505050506040513d60208110156111d257600080fd5b505161120f5760405162461bcd60e51b8152600401808060200182810382526027815260200180611e906027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561128057600080fd5b505afa158015611294573d6000803e3d6000fd5b505050506040513d60208110156112aa57600080fd5b5051600114611300576040805162461bcd60e51b815260206004820152601660248201527f4d756c7469706c65206d696e7465727320657869737400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca15c873876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561137157600080fd5b505afa158015611385573d6000803e3d6000fd5b505050506040513d602081101561139b57600080fd5b50516001146113f1576040805162461bcd60e51b815260206004820152601b60248201527f4d756c7469706c6520736e617073686f74746572732065786973740000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d602081101561148157600080fd5b50516003554260025562093a80691eb4773b6d1318a00000046004557fa96ad9a0b81b29565fbe231714a2f2c152b759e603c91bf87144a3f61944f0a562093a80691eb4773b6d1318a000006003546040805193909204835260208301528051918290030190a1505050505050506114f76119cf565b565b671080e992061ab30081565b60006103416119d6565b60006103416301e13380611521611a10565b9061195b565b60045490565b611535611986565b600254611546906301e1338061195b565b421061155457611554611a3c565b61155c6119d6565b6115f8827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c657600080fd5b505afa1580156115da573d6000803e3d6000fd5b505050506040513d60208110156115f057600080fd5b50519061195b565b11156116355760405162461bcd60e51b815260040180806020018281038252602e815260200180611eb7602e913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050505050565b60025490565b670353c226d6c6f58081565b60035490565b670de0b6b3a764000081565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6117a3611986565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639711715a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b50505050565b6000610341611a10565b6000611839611777565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561187e57600080fd5b505afa158015611892573d6000803e3d6000fd5b505050506040513d60208110156118a857600080fd5b5051905090565b6301e1338081565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006118e78383611af8565b9392505050565b6002546118ff906301e1338061195b565b421015611953576040805162461bcd60e51b815260206004820152601a60248201527f45706f636820686173206e6f742066696e697368656420796574000000000000604482015290519081900360640190fd5b6114f7611a3c565b60008282016118e78482101583611ce5565b61197f60026000541415610190611ce5565b6002600055565b60006119b56000357fffffffff0000000000000000000000000000000000000000000000000000000016611706565b90506119cc6119c48233611cf7565b610191611ce5565b50565b6001600055565b6000806119fa6004546119f460025442611dc090919063ffffffff16565b90611dd6565b600354909150611a0a908261195b565b91505090565b600254600090611a24816301e1338061195b565b421061034157611a32611a3c565b505060025461032a565b6004546000611a5b611a52836301e13380611dd6565b6003549061195b565b9050611a81671080e992061ab300611a7b84670de0b6b3a7640000611dd6565b90611dfa565b9150611a986001805461195b90919063ffffffff16565b600155600254611aac906301e1338061195b565b60025560048290556003819055604080518381526020810183905281517fa96ad9a0b81b29565fbe231714a2f2c152b759e603c91bf87144a3f61944f0a5929181900390910190a15050565b600081831115611b4f576040805162461bcd60e51b815260206004820152600b60248201527f7374617274203e20656e64000000000000000000000000000000000000000000604482015290519081900360640190fd5b600254600454611b63826301e1338061195b565b841115611b9b57611b78826301e1338061195b565b9150611b98671080e992061ab300611a7b83670de0b6b3a7640000611dd6565b90505b611ba9826301e1338061195b565b841115611bfd576040805162461bcd60e51b815260206004820152601160248201527f746f6f2066617220696e20667574757265000000000000000000000000000000604482015290519081900360640190fd5b6000805b6103e7811015611cdb57838610611c915785611c21856301e1338061195b565b811115611c3957611c36856301e1338061195b565b90505b87611c48866301e1338061195b565b8110611c55575050611cdb565b85811015611c605750845b611c7e611c77611c708484611dc0565b8790611dd6565b859061195b565b9350858910611c8e575050611cdb565b50505b611c9f846301e13380611dc0565b9350611cbf670de0b6b3a7640000611a7b85671080e992061ab300611dd6565b9250670353c226d6c6f580831115611cd357fe5b600101611c01565b5095945050505050565b81611cf357611cf381611e1a565b5050565b6000611d0161182f565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b158015611d8d57600080fd5b505afa158015611da1573d6000803e3d6000fd5b505050506040513d6020811015611db757600080fd5b50519392505050565b6000611dd0838311156001611ce5565b50900390565b60008282026118e7841580611df3575083858381611df057fe5b04145b6003611ce5565b6000611e098215156004611ce5565b818381611e1257fe5b049392505050565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206973206e6f7420616e2061646d696e42616c616e636572546f6b656e41646d696e206973206e6f74206120736e617073686f747465724d696e7420616d6f756e7420657863656564732072656d61696e696e6720617661696c61626c6520737570706c7942616c616e636572546f6b656e41646d696e206973206e6f742061206d696e746572a2646970667358221220a459c85912fdce627684d21527776eefc200f8c541a4e17a37a3c844fdf3837264736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1B9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x851C1BB3 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xB87B5616 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xC3B03FA8 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC3B03FA8 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0xCB626AE2 EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0xD43B40FA EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0xD725A9CA EQ PUSH2 0x2FB JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0xB87B5616 EQ PUSH2 0x2EB JUMPI DUP1 PUSH4 0xC0039699 EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0xC167D1CD EQ PUSH2 0x1F2 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0xA228BCED GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0xA228BCED EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0xADC4CF43 EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0xB26B238E EQ PUSH2 0x1FA JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x9711715A EQ PUSH2 0x2D3 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x2C4E722E GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x4DBAC733 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x4DBAC733 EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0x55F74176 EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0x7EFAD8E0 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x819DF2C4 EQ PUSH2 0x202 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x2C4E722E EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x4D2FA413 EQ PUSH2 0x243 JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x21609BBF GT PUSH2 0x197 JUMPI DUP1 PUSH4 0x21609BBF EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x24F92A25 EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0x277DBAFB EQ PUSH2 0x1FA JUMPI PUSH2 0x1B9 JUMP JUMPDEST DUP1 PUSH4 0x87905C9 EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0xDFBDCE4 EQ PUSH2 0x1D8 JUMPI DUP1 PUSH4 0xF15F4C0 EQ PUSH2 0x1E0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C6 PUSH2 0x326 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C6 PUSH2 0x32D JUMP JUMPDEST PUSH2 0x1E8 PUSH2 0x346 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1C6 PUSH2 0x14F9 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x1505 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x150F JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x1527 JUMP JUMPDEST PUSH2 0x1E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x152D JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16E2 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16E8 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16F4 JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x16FA JUMP JUMPDEST PUSH2 0x1C6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1706 JUMP JUMPDEST PUSH2 0x2AA PUSH2 0x1777 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E8 PUSH2 0x179B JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x1825 JUMP JUMPDEST PUSH2 0x2AA PUSH2 0x182F JUMP JUMPDEST PUSH2 0x1C6 PUSH2 0x18AF JUMP JUMPDEST PUSH2 0x2AA PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x1C6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x18DB JUMP JUMPDEST PUSH2 0x1E8 PUSH2 0x18EE JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x341 SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x34E PUSH2 0x196D JUMP JUMPDEST PUSH2 0x356 PUSH2 0x1986 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x2 SLOAD EQ PUSH2 0x3CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920616374697661746564000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD5391393 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x448 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x7028E2CD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x7028E2CD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x500 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xA217FDDF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x91D14854 SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x67B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x6CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1E6E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x741 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x755 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x76B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9010D07C DUP8 PUSH1 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x80A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x820 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD547741F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0xD547741F SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x772 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x2F2FF15D SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x977 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBA3 JUMPI PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9010D07C DUP8 PUSH1 0x0 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD547741F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0xD547741F SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0xA33 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x2F2FF15D SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xE7F JUMPI PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9010D07C DUP9 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ADDRESS EQ PUSH2 0xE71 JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD547741F DUP9 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xE76 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xCF5 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0xD547741F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD547741F SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x101B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573732065786973747320776974682061646D696E20726967687473 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x91D14854 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1115 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EE5 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x91D14854 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1E90 PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP9 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1294 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 EQ PUSH2 0x1300 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D756C7469706C65206D696E7465727320657869737400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCA15C873 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1385 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x139B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 EQ PUSH2 0x13F1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D756C7469706C6520736E617073686F74746572732065786973740000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1457 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x146B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE TIMESTAMP PUSH1 0x2 SSTORE PUSH3 0x93A80 PUSH10 0x1EB4773B6D1318A00000 DIV PUSH1 0x4 SSTORE PUSH32 0xA96AD9A0B81B29565FBE231714A2F2C152B759E603C91BF87144A3F61944F0A5 PUSH3 0x93A80 PUSH10 0x1EB4773B6D1318A00000 PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 SWAP1 SWAP3 DIV DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP POP POP POP POP POP PUSH2 0x14F7 PUSH2 0x19CF JUMP JUMPDEST JUMP JUMPDEST PUSH8 0x1080E992061AB300 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x341 PUSH2 0x19D6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x341 PUSH4 0x1E13380 PUSH2 0x1521 PUSH2 0x1A10 JUMP JUMPDEST SWAP1 PUSH2 0x195B JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1535 PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x1546 SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1554 JUMPI PUSH2 0x1554 PUSH2 0x1A3C JUMP JUMPDEST PUSH2 0x155C PUSH2 0x19D6 JUMP JUMPDEST PUSH2 0x15F8 DUP3 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x15F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH2 0x195B JUMP JUMPDEST GT ISZERO PUSH2 0x1635 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EB7 PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH8 0x353C226D6C6F580 DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x17A3 PUSH2 0x1986 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9711715A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x180B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x181F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x341 PUSH2 0x1A10 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1839 PUSH2 0x1777 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x187E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1892 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x18A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH4 0x1E13380 DUP2 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18E7 DUP4 DUP4 PUSH2 0x1AF8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x18FF SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x1953 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45706F636820686173206E6F742066696E697368656420796574000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x14F7 PUSH2 0x1A3C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x18E7 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x197F PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19B5 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1706 JUMP JUMPDEST SWAP1 POP PUSH2 0x19CC PUSH2 0x19C4 DUP3 CALLER PUSH2 0x1CF7 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1CE5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x19FA PUSH1 0x4 SLOAD PUSH2 0x19F4 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1DC0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x1DD6 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 SWAP2 POP PUSH2 0x1A0A SWAP1 DUP3 PUSH2 0x195B JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1A24 DUP2 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST TIMESTAMP LT PUSH2 0x341 JUMPI PUSH2 0x1A32 PUSH2 0x1A3C JUMP JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH2 0x32A JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 PUSH2 0x1A5B PUSH2 0x1A52 DUP4 PUSH4 0x1E13380 PUSH2 0x1DD6 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP PUSH2 0x1A81 PUSH8 0x1080E992061AB300 PUSH2 0x1A7B DUP5 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1DD6 JUMP JUMPDEST SWAP1 PUSH2 0x1DFA JUMP JUMPDEST SWAP2 POP PUSH2 0x1A98 PUSH1 0x1 DUP1 SLOAD PUSH2 0x195B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH1 0x2 SLOAD PUSH2 0x1AAC SWAP1 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x4 DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xA96AD9A0B81B29565FBE231714A2F2C152B759E603C91BF87144A3F61944F0A5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x1B4F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x7374617274203E20656E64000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x4 SLOAD PUSH2 0x1B63 DUP3 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x1B9B JUMPI PUSH2 0x1B78 DUP3 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST SWAP2 POP PUSH2 0x1B98 PUSH8 0x1080E992061AB300 PUSH2 0x1A7B DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1DD6 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1BA9 DUP3 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x1BFD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F6F2066617220696E20667574757265000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH2 0x3E7 DUP2 LT ISZERO PUSH2 0x1CDB JUMPI DUP4 DUP7 LT PUSH2 0x1C91 JUMPI DUP6 PUSH2 0x1C21 DUP6 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x1C39 JUMPI PUSH2 0x1C36 DUP6 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST SWAP1 POP JUMPDEST DUP8 PUSH2 0x1C48 DUP7 PUSH4 0x1E13380 PUSH2 0x195B JUMP JUMPDEST DUP2 LT PUSH2 0x1C55 JUMPI POP POP PUSH2 0x1CDB JUMP JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1C60 JUMPI POP DUP5 JUMPDEST PUSH2 0x1C7E PUSH2 0x1C77 PUSH2 0x1C70 DUP5 DUP5 PUSH2 0x1DC0 JUMP JUMPDEST DUP8 SWAP1 PUSH2 0x1DD6 JUMP JUMPDEST DUP6 SWAP1 PUSH2 0x195B JUMP JUMPDEST SWAP4 POP DUP6 DUP10 LT PUSH2 0x1C8E JUMPI POP POP PUSH2 0x1CDB JUMP JUMPDEST POP POP JUMPDEST PUSH2 0x1C9F DUP5 PUSH4 0x1E13380 PUSH2 0x1DC0 JUMP JUMPDEST SWAP4 POP PUSH2 0x1CBF PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A7B DUP6 PUSH8 0x1080E992061AB300 PUSH2 0x1DD6 JUMP JUMPDEST SWAP3 POP PUSH8 0x353C226D6C6F580 DUP4 GT ISZERO PUSH2 0x1CD3 JUMPI INVALID JUMPDEST PUSH1 0x1 ADD PUSH2 0x1C01 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x1CF3 JUMPI PUSH2 0x1CF3 DUP2 PUSH2 0x1E1A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D01 PUSH2 0x182F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DD0 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x1CE5 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x18E7 DUP5 ISZERO DUP1 PUSH2 0x1DF3 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1DF0 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E09 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1CE5 JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x1E12 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E2069 PUSH20 0x206E6F7420616E2061646D696E42616C616E6365 PUSH19 0x546F6B656E41646D696E206973206E6F742061 KECCAK256 PUSH20 0x6E617073686F747465724D696E7420616D6F756E PUSH21 0x20657863656564732072656D61696E696E67206176 PUSH2 0x696C PUSH2 0x626C PUSH6 0x20737570706C PUSH26 0x42616C616E636572546F6B656E41646D696E206973206E6F7420 PUSH2 0x206D PUSH10 0x6E746572A26469706673 PC 0x22 SLT KECCAK256 LOG4 MSIZE 0xC8 MSIZE SLT REVERT 0xCE PUSH3 0x7684D2 ISZERO 0x27 PUSH24 0x6EEFC200F8C541A4E17A37A3C844FDF3837264736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1910:14868:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8778:94;;;:::i;:::-;;;;;;;;;;;;;;;;9143:126;;;:::i;3291:4464::-;;;:::i;:::-;;2270:81;;;:::i;15236:102::-;;;:::i;10334:130::-;;;:::i;15144:86::-;;;:::i;7933:529::-;;;;;;;;;;;;;;;;-1:-1:-1;7933:529:48;;;;;;;;;:::i;8959:100::-;;;:::i;2090:82::-;;;:::i;9374:104::-;;;:::i;2378:56::-;;;:::i;2607:430:33:-;;;;;;;;;;;;;;;;-1:-1:-1;2607:430:33;;;;:::i;1247:79:35:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8623:84:48;;;:::i;10048:113::-;;;:::i;1386:109:35:-;;;:::i;2201:63:48:-;;;:::i;2990:114::-;;;:::i;11161:145::-;;;;;;;;;;;;;;;;-1:-1:-1;11161:145:48;;;;;;;:::i;10694:193::-;;;:::i;8778:94::-;8853:12;;8778:94;;:::o;9143:126::-;9222:15;;9196:7;;9222:40;;2256:8;9222:19;:40::i;:::-;9215:47;;9143:126;:::o;3291:4464::-;2613:20:44;:18;:20::i;:::-;2276:21:33::1;:19;:21::i;:::-;3392:17:48::2;3373:15;;:36;3365:66;;;::::0;;-1:-1:-1;;;3365:66:48;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;4023:18;4044:14;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;4044:28:48;4105:30:::2;::::0;;;;;;;4044:28;;-1:-1:-1;4082:20:48::2;::::0;4105:28:::2;:14;:28;::::0;::::2;::::0;:30:::2;::::0;;::::2;::::0;4044:28:::2;::::0;4105:30;;;;;;;:28;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;4105:30:48;4165:35:::2;::::0;;;;;;;4105:30;;-1:-1:-1;4145:17:48::2;::::0;4165:33:::2;:14;:33;::::0;::::2;::::0;:35:::2;::::0;;::::2;::::0;4105:30:::2;::::0;4165:35;;;;;;;:33;:35;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;4165:35:48;4219:48:::2;::::0;;;;;::::2;::::0;::::2;::::0;;;4261:4:::2;4219:48:::0;;;;;;4165:35;;-1:-1:-1;4219:22:48::2;:14;:22;::::0;::::2;::::0;:48;;;;;4165:35:::2;::::0;4219:48;;;;;;;;:22;:48;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;4219:48:48;4211:95:::2;;;;-1:-1:-1::0;;;4211:95:48::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4418:23;4444:14;:33;;;4478:10;4444:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;4444:45:48;;-1:-1:-1;4504:9:48::2;4499:190;4523:15;4519:1;:19;4499:190;;;4559:14;4576;:28;;;4605:10;4617:1;4576:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;4576:43:48;4633:45:::2;::::0;;;;;::::2;::::0;::::2;::::0;;;:25:::2;:45:::0;;::::2;::::0;;;;;;4576:43;;-1:-1:-1;4633:14:48::2;:25:::0;;::::2;::::0;::::2;::::0;:45;;;;;-1:-1:-1;;4633:45:48;;;;;;;;-1:-1:-1;4633:25:48;:45;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;4499:190;4540:3;;;;;4499:190;;;-1:-1:-1::0;4762:51:48::2;::::0;;;;;::::2;::::0;::::2;::::0;;;4807:4:::2;4762:51:::0;;;;;;:24:::2;:14;:24;::::0;::::2;::::0;:51;;;;;-1:-1:-1;;4762:51:48;;;;;;;-1:-1:-1;4762:24:48;:51;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;5139:28;5170:14;:33;;;5204:12;5170:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;5170:47:48;;-1:-1:-1;5232:9:48::2;5227:209;5251:20;5247:1;:24;5227:209;;;5292:19;5314:14;:28;;;5343:12;5357:1;5314:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;5314:45:48;5373:52:::2;::::0;;;;;::::2;::::0;::::2;::::0;;;:25:::2;:52:::0;;::::2;::::0;;;;;;5314:45;;-1:-1:-1;5373:14:48::2;:25:::0;;::::2;::::0;::::2;::::0;:52;;;;;-1:-1:-1;;5373:52:48;;;;;;;;-1:-1:-1;5373:25:48;:52;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;5227:209;5273:3;;;;;5227:209;;;-1:-1:-1::0;5514:53:48::2;::::0;;;;;::::2;::::0;::::2;::::0;;;5561:4:::2;5514:53:::0;;;;;;:24:::2;:14;:24;::::0;::::2;::::0;:53;;;;;-1:-1:-1;;5514:53:48;;;;;;;-1:-1:-1;5514:24:48;:53;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;6016:22;6041:14;:33;;;6075:9;6041:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;6041:44:48;;-1:-1:-1;6095:16:48::2;::::0;6125:414:::2;6149:14;6145:1;:18;6125:414;;;6184:13;6200:14;:28;;;6229:9;6240:8;6200:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;6200:49:48;;-1:-1:-1;6267:22:48::2;::::0;::::2;6284:4;6267:22;6263:266;;6309:14;:25;;;6335:9;6346:5;6309:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;6263:266;;;6513:1;6502:12;;6263:266;-1:-1:-1::0;6165:3:48::2;;6125:414;;;-1:-1:-1::0;6778:51:48::2;::::0;;;;;::::2;::::0;::::2;::::0;;;6823:4:::2;6778:51:::0;;;;;;:25:::2;:14;:25;::::0;::::2;::::0;:51;;;;;-1:-1:-1;;6778:51:48;;;;;;;-1:-1:-1;6778:25:48;:51;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;6940:14;:33;;;6974:9;6940:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;6940:44:48;:49;6932:94:::2;;;::::0;;-1:-1:-1;;;6932:94:48;;::::2;;::::0;::::2;::::0;;;;;;;::::2;::::0;;;;;;;;;;;;;::::2;;7044:49;::::0;;;;;::::2;::::0;::::2;::::0;;;7087:4:::2;7044:49:::0;;;;;;:22:::2;:14;:22;::::0;::::2;::::0;:49;;;;;::::2;::::0;;;;;;;;:22;:49;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7044:49:48;7036:96:::2;;;;-1:-1:-1::0;;;7036:96:48::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7150:51;::::0;;;;;::::2;::::0;::::2;::::0;;;7195:4:::2;7150:51:::0;;;;;;:22:::2;:14;:22;::::0;::::2;::::0;:51;;;;;::::2;::::0;;;;;;;;:22;:51;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7150:51:48;7142:103:::2;;;;-1:-1:-1::0;;;7142:103:48::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7263:14;:33;;;7297:10;7263:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7263:45:48;7312:1:::2;7263:50;7255:85;;;::::0;;-1:-1:-1;;;7255:85:48;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;7358:14;:33;;;7392:12;7358:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7358:47:48;7409:1:::2;7358:52;7350:92;;;::::0;;-1:-1:-1;;;7350:92:48;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;7576:14;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;7576:28:48;7556:17:::2;:48:::0;7632:15:::2;7614;:33:::0;2164:7:::2;2139:13;2138:34;7657:5;:20:::0;7692:56:::2;2164:7;2139:13;7730:17;::::0;7692:56:::2;::::0;;2138:34;;;::::2;7692:56:::0;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;2307:1:33;;;;;;;2654:19:44::0;:17;:19::i;:::-;3291:4464:48:o;2270:81::-;2332:19;2270:81;:::o;15236:102::-;15287:7;15313:18;:16;:18::i;10334:130::-;10384:7;10410:47;2256:8;10410:22;:20;:22::i;:::-;:26;;:47::i;15144:86::-;15218:5;;15144:86;:::o;7933:529::-;2276:21:33;:19;:21::i;:::-;8157:15:48::1;::::0;:40:::1;::::0;2256:8:::1;8157:19;:40::i;:::-;8138:15;:59;8134:115;;8213:25;:23;:25::i;:::-;8324:18;:16;:18::i;:::-;8280:40;8313:6;8280:14;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8280:28:48;;:32:::1;:40::i;:::-;:62;;8259:155;;;;-1:-1:-1::0;;;8259:155:48::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8424:14;:19;;;8444:2;8448:6;8424:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7933:529:::0;;:::o;8959:100::-;9037:15;;8959:100;:::o;2090:82::-;2138:34;2090:82;:::o;9374:104::-;9454:17;;9374:104;:::o;2378:56::-;2430:4;2378:56;:::o;2607:430:33:-;2979:50;;;2996:22;2979:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2969:61;;;;;2607:430;;;:::o;1247:79:35:-;1313:6;1247:79;:::o;8623:84:48:-;2276:21:33;:19;:21::i;:::-;8675:14:48::1;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8623:84::o:0;10048:113::-;10106:7;10132:22;:20;:22::i;1386:109:35:-;1432:11;1462:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1462:26:35;;-1:-1:-1;1386:109:35;:::o;2201:63:48:-;2256:8;2201:63;:::o;2990:114::-;3083:14;2990:114;:::o;11161:145::-;11241:7;11267:32;11288:5;11295:3;11267:20;:32::i;:::-;11260:39;11161:145;-1:-1:-1;;;11161:145:48:o;10694:193::-;10774:15;;:40;;2256:8;10774:19;:40::i;:::-;10755:15;:59;;10747:98;;;;;-1:-1:-1;;;10747:98:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;10855:25;:23;:25::i;612:166:36:-;670:7;701:5;;;716:37;725:6;;;;670:7;716:8;:37::i;2686:271:44:-;2809:48;2113:1;2818:7;;:19;;8984:3:20;2809:8:44;:48::i;:::-;2113:1;2932:7;:18;2686:271::o;2420:181:33:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9040:3:20;2524:8:33;:70::i;:::-;2420:181;:::o;2963:208:44:-;2070:1;3142:7;:22;2963:208::o;11441:227:48:-;11492:7;11511:33;11547:49;11590:5;;11548:36;11568:15;;11548;:19;;:36;;;;:::i;:::-;11547:42;;:49::i;:::-;11613:17;;11511:85;;-1:-1:-1;11613:48:48;;11511:85;11613:21;:48::i;:::-;11606:55;;;11441:227;:::o;11847:306::-;11941:15;;11897:7;;11989:39;11941:15;2256:8;11989:18;:39::i;:::-;11970:15;:58;11966:150;;12044:25;:23;:25::i;:::-;-1:-1:-1;;12090:15:48;;12083:22;;12159:547;12237:5;;12213:21;12279:61;12301:38;12237:5;2256:8;12301:17;:38::i;:::-;12279:17;;;:21;:61::i;:::-;12252:88;-1:-1:-1;12366:71:48;2332:19;12366:35;:13;2430:4;12366:17;:35::i;:::-;:43;;:71::i;:::-;12350:87;;12463:19;12480:1;12463:12;;:16;;:19;;;;:::i;:::-;12448:12;:34;12510:15;;:40;;2256:8;12510:19;:40::i;:::-;12492:15;:58;12560:5;:21;;;12591:17;:36;;;12643:56;;;;;;;;;;;;;;;;;;;;;;;;;12159:547;;:::o;12980:1949::-;13061:7;13097:3;13088:5;:12;;13080:36;;;;;-1:-1:-1;;;13080:36:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:15;;13201:5;;13393:41;13154:15;2256:8;13393:20;:41::i;:::-;13387:3;:47;13383:235;;;13469:41;:16;2256:8;13469:20;:41::i;:::-;13450:60;-1:-1:-1;13538:69:48;2332:19;13538:33;:11;2430:4;13538:15;:33::i;:69::-;13524:83;;13383:235;13643:41;:16;2256:8;13643:20;:41::i;:::-;13636:3;:48;;13628:78;;;;;-1:-1:-1;;;13628:78:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;13717:14;13750:13;13745:1154;13777:3;13769:5;:11;13745:1154;;;13816:16;13809:3;:23;13805:789;;13873:3;13911:41;:16;2256:8;13911:20;:41::i;:::-;13898:10;:54;13894:155;;;13989:41;:16;2256:8;13989:20;:41::i;:::-;13976:54;;13894:155;14090:5;14133:41;:16;2256:8;14133:20;:41::i;:::-;14117:12;:57;14113:287;;14261:5;;;;14113:287;14310:16;14295:12;:31;14291:109;;;-1:-1:-1;14365:16:48;14291:109;14427:57;14438:45;14454:28;:10;14469:12;14454:14;:28::i;:::-;14438:11;;:15;:45::i;:::-;14427:6;;:10;:57::i;:::-;14418:66;;14516:16;14507:5;:25;14503:77;;14556:5;;;;14503:77;13805:789;;;14627:41;:16;2256:8;14627:20;:41::i;:::-;14608:60;-1:-1:-1;14770:69:48;2430:4;14770:43;:11;2332:19;14770:15;:43::i;:69::-;14756:83;-1:-1:-1;2138:34:48;14860:27;;;14853:35;;;;13782:7;;13745:1154;;;-1:-1:-1;14916:6:48;12980:1949;-1:-1:-1;;;;;12980:1949:48:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;1501:178:35:-;1589:4;1612:15;:13;:15::i;:::-;:26;;;1639:8;1649:7;1666:4;1612:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1612:60:35;;1501:178;-1:-1:-1;;;1501:178:35:o;1193:166:36:-;1251:7;1270:37;1284:1;1279;:6;;4370:1:20;1270:8:36;:37::i;:::-;-1:-1:-1;1329:5:36;;;1193:166::o;2038:180::-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;4467:1:20;2142:8:36;:51::i;2402:148::-;2464:7;2483:38;2492:6;;;4516:1:20;2483:8:36;:38::i;:::-;2542:1;2538;:5;;;;;;;2402:148;-1:-1:-1;;;2402:148:36:o;1074:3172:20:-;-1:-1:-1;;;3588:3:20;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "methodIdentifiers": { + "INITIAL_RATE()": "4dbac733", + "RATE_DENOMINATOR()": "7efad8e0", + "RATE_REDUCTION_COEFFICIENT()": "21609bbf", + "RATE_REDUCTION_TIME()": "b87b5616", + "activate()": "0f15f4c0", + "available_supply()": "24f92a25", + "futureEpochTimeWrite()": "277dbafb", + "future_epoch_time_write()": "b26b238e", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getAvailableSupply()": "c167d1cd", + "getBalancerToken()": "c0039699", + "getFutureEpochTime()": "0dfbdce4", + "getInflationRate()": "819df2c4", + "getMiningEpoch()": "087905c9", + "getStartEpochSupply()": "55f74176", + "getStartEpochTime()": "4d2fa413", + "getVault()": "8d928af8", + "mint(address,uint256)": "40c10f19", + "mintableInTimeframe(uint256,uint256)": "c3b03fa8", + "mintable_in_timeframe(uint256,uint256)": "d725a9ca", + "rate()": "2c4e722e", + "snapshot()": "9711715a", + "startEpochTimeWrite()": "a228bced", + "start_epoch_time_write()": "adc4cf43", + "updateMiningParameters()": "cb626ae2", + "update_mining_parameters()": "d43b40fa" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerToken\",\"name\":\"balancerToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"}],\"name\":\"MiningParametersUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"INITIAL_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RATE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RATE_REDUCTION_COEFFICIENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RATE_REDUCTION_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"available_supply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"futureEpochTimeWrite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"future_epoch_time_write\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAvailableSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerToken\",\"outputs\":[{\"internalType\":\"contract IBalancerToken\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFutureEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInflationRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMiningEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStartEpochSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStartEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"mintableInTimeframe\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"mintable_in_timeframe\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"snapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startEpochTimeWrite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start_epoch_time_write\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateMiningParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"update_mining_parameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract exists as a consequence of the gauge systems needing to know a fixed inflation schedule in order to know how much BAL a gauge is allowed to mint. As this does not exist within the BAL token itself it is defined here, we must then wrap the token's minting functionality in order for this to be meaningful.\",\"kind\":\"dev\",\"methods\":{\"activate()\":{\"details\":\"Reverts if contract does not have sole minting powers over BAL (and no other minters can be added).\"},\"futureEpochTimeWrite()\":{\"returns\":{\"_0\":\"Timestamp of the next epoch\"}},\"future_epoch_time_write()\":{\"returns\":{\"_0\":\"Timestamp of the next epoch\"}},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getBalancerToken()\":{\"details\":\"Returns the Balancer token.\"},\"mint(address,uint256)\":{\"details\":\"Callable only by addresses defined in the Balancer Authorizer contract\"},\"mintableInTimeframe(uint256,uint256)\":{\"params\":{\"end\":\"End of the time interval (timestamp)\",\"start\":\"Start of the time interval (timestamp)\"},\"returns\":{\"_0\":\"Tokens mintable from `start` till `end`\"}},\"mintable_in_timeframe(uint256,uint256)\":{\"params\":{\"end\":\"End of the time interval (timestamp)\",\"start\":\"Start of the time interval (timestamp)\"},\"returns\":{\"_0\":\"Tokens mintable from `start` till `end`\"}},\"snapshot()\":{\"details\":\"Callable only by addresses defined in the Balancer Authorizer contract\"},\"startEpochTimeWrite()\":{\"returns\":{\"_0\":\"Timestamp of the current epoch\"}},\"start_epoch_time_write()\":{\"returns\":{\"_0\":\"Timestamp of the current epoch\"}},\"updateMiningParameters()\":{\"details\":\"Callable by any address, but only once per epoch Total supply becomes slightly larger if this function is called late\"},\"update_mining_parameters()\":{\"details\":\"Callable by any address, but only once per epoch Total supply becomes slightly larger if this function is called late\"}},\"title\":\"Balancer Token Admin\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"activate()\":{\"notice\":\"Initiate BAL token inflation schedule\"},\"futureEpochTimeWrite()\":{\"notice\":\"Get timestamp of the next mining epoch start while simultaneously updating mining parameters\"},\"future_epoch_time_write()\":{\"notice\":\"Get timestamp of the next mining epoch start while simultaneously updating mining parameters\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getAvailableSupply()\":{\"notice\":\"Maximum allowable number of tokens in existence (claimed or unclaimed)\"},\"getFutureEpochTime()\":{\"notice\":\"Returns the start timestamp of the next epoch.\"},\"getInflationRate()\":{\"notice\":\"Returns the current inflation rate of BAL per second\"},\"getMiningEpoch()\":{\"notice\":\"Returns the current epoch number.\"},\"getStartEpochSupply()\":{\"notice\":\"Returns the available supply at the beginning of the current epoch.\"},\"getStartEpochTime()\":{\"notice\":\"Returns the start timestamp of the current epoch.\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"},\"mint(address,uint256)\":{\"notice\":\"Mint BAL tokens subject to the defined inflation schedule\"},\"mintableInTimeframe(uint256,uint256)\":{\"notice\":\"How much supply is mintable from start timestamp till end timestamp\"},\"mintable_in_timeframe(uint256,uint256)\":{\"notice\":\"How much supply is mintable from start timestamp till end timestamp\"},\"snapshot()\":{\"notice\":\"Perform a snapshot of BAL token balances\"},\"startEpochTimeWrite()\":{\"notice\":\"Get timestamp of the current mining epoch start while simultaneously updating mining parameters\"},\"start_epoch_time_write()\":{\"notice\":\"Get timestamp of the current mining epoch start while simultaneously updating mining parameters\"},\"updateMiningParameters()\":{\"notice\":\"Update mining rate and supply at the start of the epoch\"},\"update_mining_parameters()\":{\"notice\":\"Update mining rate and supply at the start of the epoch\"}},\"notice\":\"This contract holds all admin powers over the BAL token passing through calls while delegating access control to the Balancer Authorizer In addition, calls to the mint function must respect the inflation schedule as defined in this contract. As this contract is the only way to mint BAL tokens this ensures that the maximum allowed supply is enforced\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerTokenAdmin.sol\":\"BalancerTokenAdmin\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/BalancerTokenAdmin.sol\":{\"keccak256\":\"0x0845e1c626af8ef5232b9ad016284ad5398ff74fb22b8e7693a0c80a787b0c9a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ad3057cac2c04c1f13002f3ee7ff33912b495a268eaf9fdf80d97d05653a9ed\",\"dweb:/ipfs/QmQAFmPhMUkmib6Yt1acK8kgpKCT2mHWWutWURwC9B6GjB\"]}},\"version\":1}" + } + }, + "contracts/SmartWalletChecker.sol": { + "SmartWalletChecker": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "address[]", + "name": "initialAllowedAddresses", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractAddressAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "ContractAddressRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "allowlistAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "check", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "denylistAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getAllowlistedAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllowlistedAddressesLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60c060405234801561001057600080fd5b50604051610bcb380380610bcb8339818101604052604081101561003357600080fd5b81516020830180516040519294929383019291908464010000000082111561005a57600080fd5b90830190602082018581111561006f57600080fd5b825186602082028301116401000000008211171561008c57600080fd5b82525081516020918201928201910280838360005b838110156100b95781810151838201526020016100a1565b505050509190910160405250503060805250506001600160601b0319606083901b1660a052805160005b818110156101155761010d8382815181106100fa57fe5b602002602001015161011e60201b60201c565b6001016100e3565b5050505061024c565b6101368160006101c660201b61040d1790919060201c565b610187576040805162461bcd60e51b815260206004820152601b60248201527f4164647265737320616c726561647920616c6c6f776c69737465640000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517fc1fafd2633d2190fbc0bd1e0e993dc44495d77bd7a5bc0a4951b5edb0d58254e9181900360200190a150565b60006101d2838361022b565b61022157508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b03861690811790915585549082528286019093526040902091909155610225565b5060005b92915050565b6001600160a01b031660009081526001919091016020526040902054151590565b60805160a05160601c6109596102726000398061027052508061020352506109596000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063aaabadc51161005b578063aaabadc514610161578063c23697a814610169578063c7abf7e2146101b0578063f191aad0146101b857610088565b80632ee7ca641461008d578063851c1bb3146100d35780638d928af814610124578063a5ee4e711461012c575b600080fd5b6100aa600480360360208110156100a357600080fd5b50356101eb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610112600480360360208110156100e957600080fd5b50357fffffffff00000000000000000000000000000000000000000000000000000000166101fd565b60408051918252519081900360200190f35b6100aa61026e565b61015f6004803603602081101561014257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610292565b005b6100aa61035c565b61019c6004803603602081101561017f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166103dc565b604080519115158252519081900360200190f35b6101126103e8565b61015f600480360360208110156101ce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166103f9565b60006101f78183610496565b92915050565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b61029a6104b9565b6102a56000826104ff565b61031057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41646472657373206973206e6f7420616c6c6f776c6973746564000000000000604482015290519081900360640190fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f6b7e0fe40ab6dde83349106ff5b5ce7689d5912a704a21a972034191d182de329181900360200190a150565b600061036661026e565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ab57600080fd5b505afa1580156103bf573d6000803e3d6000fd5b505050506040513d60208110156103d557600080fd5b5051905090565b60006101f781836106ad565b60006103f460006106db565b905090565b6104016104b9565b61040a816106df565b50565b600061041983836106ad565b61048d57508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155855490825282860190935260409020919091556101f7565b50600092915050565b81546000906104a890831060646107a1565b6104b283836107b3565b9392505050565b60006104e86000357fffffffff00000000000000000000000000000000000000000000000000000000166101fd565b905061040a6104f782336107ed565b6101916107a1565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205480156106a35783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301910180821461060857600086600001828154811061056d57fe5b600091825260209091200154875473ffffffffffffffffffffffffffffffffffffffff909116915081908890859081106105a357fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905592909116815260018881019092526040902090830190555b855486908061061357fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff871682526001888101909152604082209190915593506101f792505050565b60009150506101f7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001919091016020526040902054151590565b5490565b6106ea60008261040d565b61075557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4164647265737320616c726561647920616c6c6f776c69737465640000000000604482015290519081900360640190fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fc1fafd2633d2190fbc0bd1e0e993dc44495d77bd7a5bc0a4951b5edb0d58254e9181900360200190a150565b816107af576107af816108b6565b5050565b60008260000182815481106107c457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169392505050565b60006107f761035c565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b50519392505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfea2646970667358221220d06c7a8c8cf3da8b2268ae7c91ee444b777048e99eacf0c6917311bf67a0072464736f6c63430007010033", + "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xBCB CODESIZE SUB DUP1 PUSH2 0xBCB DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xA1 JUMP JUMPDEST POP POP POP POP SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 MSTORE POP POP ADDRESS PUSH1 0x80 MSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP4 SWAP1 SHL AND PUSH1 0xA0 MSTORE DUP1 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x115 JUMPI PUSH2 0x10D DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xFA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x11E PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP PUSH2 0x24C JUMP JUMPDEST PUSH2 0x136 DUP2 PUSH1 0x0 PUSH2 0x1C6 PUSH1 0x20 SHL PUSH2 0x40D OR SWAP1 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x187 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4164647265737320616C726561647920616C6C6F776C69737465640000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0xC1FAFD2633D2190FBC0BD1E0E993DC44495D77BD7A5BC0A4951B5EDB0D58254E SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2 DUP4 DUP4 PUSH2 0x22B JUMP JUMPDEST PUSH2 0x221 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x225 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x959 PUSH2 0x272 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x270 MSTORE POP DUP1 PUSH2 0x203 MSTORE POP PUSH2 0x959 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 0xAAABADC5 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xC23697A8 EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0xC7ABF7E2 EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0xF191AAD0 EQ PUSH2 0x1B8 JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x2EE7CA64 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xA5EE4E71 EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x112 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xAA PUSH2 0x26E JUMP JUMPDEST PUSH2 0x15F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x292 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0x35C JUMP JUMPDEST PUSH2 0x19C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x112 PUSH2 0x3E8 JUMP JUMPDEST PUSH2 0x15F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3F9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F7 DUP2 DUP4 PUSH2 0x496 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x29A PUSH2 0x4B9 JUMP JUMPDEST PUSH2 0x2A5 PUSH1 0x0 DUP3 PUSH2 0x4FF JUMP JUMPDEST PUSH2 0x310 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x41646472657373206973206E6F7420616C6C6F776C6973746564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x6B7E0FE40AB6DDE83349106FF5B5CE7689D5912A704A21A972034191D182DE32 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x366 PUSH2 0x26E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F7 DUP2 DUP4 PUSH2 0x6AD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F4 PUSH1 0x0 PUSH2 0x6DB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x401 PUSH2 0x4B9 JUMP JUMPDEST PUSH2 0x40A DUP2 PUSH2 0x6DF JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x419 DUP4 DUP4 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x48D JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1F7 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4A8 SWAP1 DUP4 LT PUSH1 0x64 PUSH2 0x7A1 JUMP JUMPDEST PUSH2 0x4B2 DUP4 DUP4 PUSH2 0x7B3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4E8 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1FD JUMP JUMPDEST SWAP1 POP PUSH2 0x40A PUSH2 0x4F7 DUP3 CALLER PUSH2 0x7ED JUMP JUMPDEST PUSH2 0x191 PUSH2 0x7A1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x6A3 JUMPI DUP4 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 ADD SWAP2 ADD DUP1 DUP3 EQ PUSH2 0x608 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x56D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 DUP9 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x5A3 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP4 ADD SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x613 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP3 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP4 POP PUSH2 0x1F7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x6EA PUSH1 0x0 DUP3 PUSH2 0x40D JUMP JUMPDEST PUSH2 0x755 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4164647265737320616C726561647920616C6C6F776C69737465640000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0xC1FAFD2633D2190FBC0BD1E0E993DC44495D77BD7A5BC0A4951B5EDB0D58254E SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST DUP2 PUSH2 0x7AF JUMPI PUSH2 0x7AF DUP2 PUSH2 0x8B6 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x7C4 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7F7 PUSH2 0x35C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x897 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD0 PUSH13 0x7A8C8CF3DA8B2268AE7C91EE44 0x4B PUSH24 0x7048E99EACF0C6917311BF67A0072464736F6C6343000701 STOP CALLER ", + "sourceMap": "1044:1649:49:-:0;;;1359:297;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1359:297:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1359:297:49;;;;;;-1:-1:-1;;1143:4:35;2049:46:33;;-1:-1:-1;;;;;;;;1162:14:35::1;::::0;;;;::::1;::::0;1494:30:49;;1119:31:35;1534:116:49::1;1558:15;1554:1;:19;1534:116;;;1594:45;1612:23;1636:1;1612:26;;;;;;;;;;;;;;1594:17;;;:45;;:::i;:::-;1575:3;;1534:116;;;;1359:297;::::0;;1044:1649;;2479:212;2558:42;2584:15;2558:21;:25;;;;;;:42;;;;:::i;:::-;2550:82;;;;;-1:-1:-1;;;2550:82:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;2647:37;;;-1:-1:-1;;;;;2647:37:49;;;;;;;;;;;;;;;2479:212;:::o;1851:410:43:-;1921:4;1942:20;1951:3;1956:5;1942:8;:20::i;:::-;1937:318;;-1:-1:-1;1978:23:43;;;;;;;;-1:-1:-1;1978:23:43;;;;;;;;;;;;-1:-1:-1;;;;;;1978:23:43;-1:-1:-1;;;;;1978:23:43;;;;;;;;2158:18;;2136:19;;;:12;;;:19;;;;;;:40;;;;2190:11;;1937:318;-1:-1:-1;2239:5:43;1937:318;1851:410;;;;:::o;3977:134::-;-1:-1:-1;;;;;4080:19:43;4057:4;4080:19;;;:12;;;;;:19;;;;;;:24;;;3977:134::o;1044:1649:49:-;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2297": [ + { + "length": 32, + "start": 515 + } + ], + "2486": [ + { + "length": 32, + "start": 624 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100885760003560e01c8063aaabadc51161005b578063aaabadc514610161578063c23697a814610169578063c7abf7e2146101b0578063f191aad0146101b857610088565b80632ee7ca641461008d578063851c1bb3146100d35780638d928af814610124578063a5ee4e711461012c575b600080fd5b6100aa600480360360208110156100a357600080fd5b50356101eb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610112600480360360208110156100e957600080fd5b50357fffffffff00000000000000000000000000000000000000000000000000000000166101fd565b60408051918252519081900360200190f35b6100aa61026e565b61015f6004803603602081101561014257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610292565b005b6100aa61035c565b61019c6004803603602081101561017f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166103dc565b604080519115158252519081900360200190f35b6101126103e8565b61015f600480360360208110156101ce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166103f9565b60006101f78183610496565b92915050565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b61029a6104b9565b6102a56000826104ff565b61031057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41646472657373206973206e6f7420616c6c6f776c6973746564000000000000604482015290519081900360640190fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f6b7e0fe40ab6dde83349106ff5b5ce7689d5912a704a21a972034191d182de329181900360200190a150565b600061036661026e565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ab57600080fd5b505afa1580156103bf573d6000803e3d6000fd5b505050506040513d60208110156103d557600080fd5b5051905090565b60006101f781836106ad565b60006103f460006106db565b905090565b6104016104b9565b61040a816106df565b50565b600061041983836106ad565b61048d57508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155855490825282860190935260409020919091556101f7565b50600092915050565b81546000906104a890831060646107a1565b6104b283836107b3565b9392505050565b60006104e86000357fffffffff00000000000000000000000000000000000000000000000000000000166101fd565b905061040a6104f782336107ed565b6101916107a1565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205480156106a35783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301910180821461060857600086600001828154811061056d57fe5b600091825260209091200154875473ffffffffffffffffffffffffffffffffffffffff909116915081908890859081106105a357fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905592909116815260018881019092526040902090830190555b855486908061061357fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff871682526001888101909152604082209190915593506101f792505050565b60009150506101f7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001919091016020526040902054151590565b5490565b6106ea60008261040d565b61075557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4164647265737320616c726561647920616c6c6f776c69737465640000000000604482015290519081900360640190fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fc1fafd2633d2190fbc0bd1e0e993dc44495d77bd7a5bc0a4951b5edb0d58254e9181900360200190a150565b816107af576107af816108b6565b5050565b60008260000182815481106107c457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169392505050565b60006107f761035c565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b50519392505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfea2646970667358221220d06c7a8c8cf3da8b2268ae7c91ee444b777048e99eacf0c6917311bf67a0072464736f6c63430007010033", + "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 0xAAABADC5 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0xC23697A8 EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0xC7ABF7E2 EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0xF191AAD0 EQ PUSH2 0x1B8 JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x2EE7CA64 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xA5EE4E71 EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAA PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x112 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xAA PUSH2 0x26E JUMP JUMPDEST PUSH2 0x15F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x142 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x292 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0x35C JUMP JUMPDEST PUSH2 0x19C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x112 PUSH2 0x3E8 JUMP JUMPDEST PUSH2 0x15F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3F9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F7 DUP2 DUP4 PUSH2 0x496 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x29A PUSH2 0x4B9 JUMP JUMPDEST PUSH2 0x2A5 PUSH1 0x0 DUP3 PUSH2 0x4FF JUMP JUMPDEST PUSH2 0x310 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x41646472657373206973206E6F7420616C6C6F776C6973746564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x6B7E0FE40AB6DDE83349106FF5B5CE7689D5912A704A21A972034191D182DE32 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x366 PUSH2 0x26E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F7 DUP2 DUP4 PUSH2 0x6AD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F4 PUSH1 0x0 PUSH2 0x6DB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x401 PUSH2 0x4B9 JUMP JUMPDEST PUSH2 0x40A DUP2 PUSH2 0x6DF JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x419 DUP4 DUP4 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x48D JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1F7 JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4A8 SWAP1 DUP4 LT PUSH1 0x64 PUSH2 0x7A1 JUMP JUMPDEST PUSH2 0x4B2 DUP4 DUP4 PUSH2 0x7B3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4E8 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1FD JUMP JUMPDEST SWAP1 POP PUSH2 0x40A PUSH2 0x4F7 DUP3 CALLER PUSH2 0x7ED JUMP JUMPDEST PUSH2 0x191 PUSH2 0x7A1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x6A3 JUMPI DUP4 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 ADD SWAP2 ADD DUP1 DUP3 EQ PUSH2 0x608 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x56D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 DUP9 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x5A3 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP4 ADD SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x613 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP3 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP4 POP PUSH2 0x1F7 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1F7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x6EA PUSH1 0x0 DUP3 PUSH2 0x40D JUMP JUMPDEST PUSH2 0x755 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4164647265737320616C726561647920616C6C6F776C69737465640000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0xC1FAFD2633D2190FBC0BD1E0E993DC44495D77BD7A5BC0A4951B5EDB0D58254E SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST DUP2 PUSH2 0x7AF JUMPI PUSH2 0x7AF DUP2 PUSH2 0x8B6 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x7C4 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7F7 PUSH2 0x35C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x897 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD0 PUSH13 0x7A8C8CF3DA8B2268AE7C91EE44 0x4B PUSH24 0x7048E99EACF0C6917311BF67A0072464736F6C6343000701 STOP CALLER ", + "sourceMap": "1044:1649:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1817:133;;;;;;;;;;;;;;;;-1:-1:-1;1817:133:49;;:::i;:::-;;;;;;;;;;;;;;;;;;;2607:430:33;;;;;;;;;;;;;;;;-1:-1:-1;2607:430:33;;;;:::i;:::-;;;;;;;;;;;;;;;;1247:79:35;;;:::i;2219:227:49:-;;;;;;;;;;;;;;;;-1:-1:-1;2219:227:49;;;;:::i;:::-;;1386:109:35;;;:::i;1662:149:49:-;;;;;;;;;;;;;;;;-1:-1:-1;1662:149:49;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1956:127;;;:::i;2089:124::-;;;;;;;;;;;;;;;;-1:-1:-1;2089:124:49;;;;:::i;1817:133::-;1886:7;1912:31;1886:7;1937:5;1912:24;:31::i;:::-;1905:38;1817:133;-1:-1:-1;;1817:133:49:o;2607:430:33:-;2979:50;;;2996:22;2979:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2969:61;;;;;2607:430;;;:::o;1247:79:35:-;1313:6;1247:79;:::o;2219:227:49:-;2276:21:33;:19;:21::i;:::-;2309:45:49::1;:21;2338:15:::0;2309:28:::1;:45::i;:::-;2301:84;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;2400:39;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;2219:227:::0;:::o;1386:109:35:-;1432:11;1462:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1462:26:35;;-1:-1:-1;1386:109:35;:::o;1662:149:49:-;1734:4;1757:47;1734:4;1788:15;1757:30;:47::i;1956:127::-;2020:7;2046:30;:21;:28;:30::i;:::-;2039:37;;1956:127;:::o;2089:124::-;2276:21:33;:19;:21::i;:::-;2172:34:49::1;2190:15;2172:17;:34::i;:::-;2089:124:::0;:::o;1851:410:43:-;1921:4;1942:20;1951:3;1956:5;1942:8;:20::i;:::-;1937:318;;-1:-1:-1;1978:23:43;;;;;;;;-1:-1:-1;1978:23:43;;;;;;;;;;;;;;;;;;;;;;;2158:18;;2136:19;;;:12;;;:19;;;;;;:40;;;;2190:11;;1937:318;-1:-1:-1;2239:5:43;1851:410;;;;:::o;4648:199::-;4750:18;;4722:7;;4741:58;;4750:26;-1:-1:-1;4838:3:20;4741:8:43;:58::i;:::-;4816:24;4829:3;4834:5;4816:12;:24::i;:::-;4809:31;4648:199;-1:-1:-1;;;4648:199:43:o;2420:181:33:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9040:3:20;2524:8:33;:70::i;2429:1467:43:-;2639:19;;;2502:4;2639:19;;;:12;;;:19;;;;;;2673:15;;2669:1221;;3114:18;;3066:14;;;;;3114:22;3236:26;;;3232:389;;3282:17;3302:3;:11;;3314:9;3302:22;;;;;;;;;;;;;;;;;;3424:26;;3302:22;;;;;-1:-1:-1;3302:22:43;;3424:3;;3436:13;;3424:26;;;;;;;;;;;;;;;;;;:38;;;;;;;;;;;3536:23;;;;;;-1:-1:-1;3536:12:43;;;:23;;;;;;3562:17;;;3536:43;;3232:389;3699:17;;:3;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3791:19;;;;3699:17;3791:12;;;:19;;;;;;3784:26;;;;3699:17;-1:-1:-1;3825:11:43;;-1:-1:-1;;;3825:11:43;2669:1221;3874:5;3867:12;;;;;3977:134;4080:19;;4057:4;4080:19;;;:12;;;;;:19;;;;;;:24;;;3977:134::o;4192:114::-;4281:18;;4192:114::o;2479:212:49:-;2558:42;:21;2584:15;2558:25;:42::i;:::-;2550:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2647:37;;;;;;;;;;;;;;;;;;;2479:212;:::o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;5212:135:43:-;5296:7;5322:3;:11;;5334:5;5322:18;;;;;;;;;;;;;;;;;;;;;5212:135;-1:-1:-1;;;5212:135:43:o;1501:178:35:-;1589:4;1612:15;:13;:15::i;:::-;:26;;;1639:8;1649:7;1666:4;1612:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1612:60:35;;1501:178;-1:-1:-1;;;1501:178:35:o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "methodIdentifiers": { + "allowlistAddress(address)": "f191aad0", + "check(address)": "c23697a8", + "denylistAddress(address)": "a5ee4e71", + "getActionId(bytes4)": "851c1bb3", + "getAllowlistedAddress(uint256)": "2ee7ca64", + "getAllowlistedAddressesLength()": "c7abf7e2", + "getAuthorizer()": "aaabadc5", + "getVault()": "8d928af8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"initialAllowedAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"allowlistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"check\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"denylistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getAllowlistedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowlistedAddressesLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SmartWalletChecker.sol\":\"SmartWalletChecker\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol\":{\"keccak256\":\"0x6059bcd6c7c6340a99ca90b2d86bfa7717edea0fab1ed6066c8728b22fa539b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f24d81c22da9a67b1340e67c621341165078f711ed0fa6170bf93963a3e6f4\",\"dweb:/ipfs/QmWHammgoPiKnLDJFzczMHNHPb6fMh5ktNBNvUdhEffwnd\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa644f3f9066d6a300bd7c1c214ce55c1569bb5ec54815d49c5c7a1a63cd03df3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81ee2467e6a0f340d64738d7a03a407e88caa5ee31cb3c8bd6990985f1891acc\",\"dweb:/ipfs/QmP7s6CSdDLGFjNxi9Q8GEVJFiD6QkeseGD857bPE7E7Ki\"]},\"contracts/SmartWalletChecker.sol\":{\"keccak256\":\"0x5ec19305a257fa4563b087f7b06f87cc365f36ea3793ddb5c77d3db024fd6658\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c187398fdcdfb16491ea6c1a773d9ab83d4c28986d650008619b2f8315b8ea\",\"dweb:/ipfs/QmXojnLyB7Aq9aFaEK8NLueNPMkK88ALGSg9U6GkjTcByu\"]}},\"version\":1}" + } + }, + "contracts/VotingEscrowDelegationProxy.sol": { + "VotingEscrowDelegationProxy": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "votingEscrow", + "type": "address" + }, + { + "internalType": "contract IVeDelegation", + "name": "delegation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "DelegationImplementationUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "adjustedBalanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "adjusted_balance_of", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDelegationImplementation", + "outputs": [ + { + "internalType": "contract IVeDelegation", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVotingEscrow", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killDelegation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IVeDelegation", + "name": "delegation", + "type": "address" + } + ], + "name": "setDelegation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60e060405234801561001057600080fd5b5060405161083c38038061083c8339818101604052606081101561003357600080fd5b5080516020820151604090920151306080819052606083811b6001600160601b031990811660a0529085901b1660c052600080546001600160a01b0319166001600160a01b03938416178155909392821692919091169061078a906100b29039806101b452806104a25250806102d2525080610265525061078a6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063851c1bb311610076578063aaabadc51161005b578063aaabadc514610177578063bbf7408a146100d9578063e6b3e7041461017f576100a3565b8063851c1bb3146101305780638d928af81461016f576100a3565b806308b0308a146100a857806325798418146100d957806363408a901461011e5780636448a3ab14610126575b600080fd5b6100b06101b2565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010c600480360360208110156100ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101d6565b60408051918252519081900360200190f35b6100b06101e9565b61012e610205565b005b61010c6004803603602081101561014657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661025f565b6100b06102d0565b6100b06102f4565b61012e6004803603602081101561019557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610374565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006101e182610481565b90505b919050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b61020d6105f6565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556040517fb2f6d9cc189e4fc02519ab5ba6d9455bedc32091e375e8a6383ed45f40653e74908290a2565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006102fe6102d0565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561034357600080fd5b505afa158015610357573d6000803e3d6000fd5b505050506040513d602081101561036d57600080fd5b5051905090565b61037c6105f6565b604080517fbbf7408a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff83169163bbf7408a916024808301926020929190829003018186803b1580156103e857600080fd5b505afa1580156103fc573d6000803e3d6000fd5b505050506040513d602081101561041257600080fd5b5050600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917fb2f6d9cc189e4fc02519ab5ba6d9455bedc32091e375e8a6383ed45f40653e7491a250565b6000805473ffffffffffffffffffffffffffffffffffffffff168061055c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561052757600080fd5b505afa15801561053b573d6000803e3d6000fd5b505050506040513d602081101561055157600080fd5b505191506101e49050565b8073ffffffffffffffffffffffffffffffffffffffff1663bbf7408a846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105c357600080fd5b505afa1580156105d7573d6000803e3d6000fd5b505050506040513d60208110156105ed57600080fd5b50519392505050565b60006106256000357fffffffff000000000000000000000000000000000000000000000000000000001661025f565b905061063c610634823361063f565b6101916106d5565b50565b60006106496102f4565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b1580156105c357600080fd5b816106e3576106e3816106e7565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfea26469706673582212206b27ad2a466532dabd0579d110aba109922b8778b40c5f4c5df301f531ce278464736f6c63430007010033", + "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x83C CODESIZE SUB DUP1 PUSH2 0x83C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD ADDRESS PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH1 0x60 DUP4 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xA0 MSTORE SWAP1 DUP6 SWAP1 SHL AND PUSH1 0xC0 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR DUP2 SSTORE SWAP1 SWAP4 SWAP3 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH2 0x78A SWAP1 PUSH2 0xB2 SWAP1 CODECOPY DUP1 PUSH2 0x1B4 MSTORE DUP1 PUSH2 0x4A2 MSTORE POP DUP1 PUSH2 0x2D2 MSTORE POP DUP1 PUSH2 0x265 MSTORE POP PUSH2 0x78A 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 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xBBF7408A EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0xE6B3E704 EQ PUSH2 0x17F JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x16F JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x8B0308A EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x25798418 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x63408A90 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0x6448A3AB EQ PUSH2 0x126 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0 PUSH2 0x1B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x10C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x205 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x10C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x25F JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x2F4 JUMP JUMPDEST PUSH2 0x12E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x374 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E1 DUP3 PUSH2 0x481 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x20D PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB2F6D9CC189E4FC02519AB5BA6D9455BEDC32091E375E8A6383ED45F40653E74 SWAP1 DUP3 SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FE PUSH2 0x2D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x357 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x36D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x37C PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xBBF7408A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP2 PUSH4 0xBBF7408A SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 PUSH32 0xB2F6D9CC189E4FC02519AB5BA6D9455BEDC32091E375E8A6383ED45F40653E74 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x55C JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x53B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x551 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 POP PUSH2 0x1E4 SWAP1 POP JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xBBF7408A DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x625 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x25F JUMP JUMPDEST SWAP1 POP PUSH2 0x63C PUSH2 0x634 DUP3 CALLER PUSH2 0x63F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x6D5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x649 PUSH2 0x2F4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH2 0x6E3 JUMPI PUSH2 0x6E3 DUP2 PUSH2 0x6E7 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0x27AD2A466532DABD0579D110 0xAB LOG1 MULMOD SWAP3 0x2B DUP8 PUSH25 0xB40C5F4C5DF301F531CE278464736F6C634300070100330000 ", + "sourceMap": "954:2360:50:-:0;;;1187:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1187:213:50;;;;;;;;;;;1143:4:35;2049:46:33;;;;1187:213:50;1162:14:35;;;-1:-1:-1;;;;;;1162:14:35;;;::::1;::::0;1331:28:50;;;;;::::1;::::0;1119:31:35;1369:24:50;;-1:-1:-1;;;;;;1369:24:50::1;-1:-1:-1::0;;;;;1369:24:50;;::::1;;::::0;;1143:4:35;;954:2360:50;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2297": [ + { + "length": 32, + "start": 613 + } + ], + "2486": [ + { + "length": 32, + "start": 722 + } + ], + "6272": [ + { + "length": 32, + "start": 436 + }, + { + "length": 32, + "start": 1186 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100a35760003560e01c8063851c1bb311610076578063aaabadc51161005b578063aaabadc514610177578063bbf7408a146100d9578063e6b3e7041461017f576100a3565b8063851c1bb3146101305780638d928af81461016f576100a3565b806308b0308a146100a857806325798418146100d957806363408a901461011e5780636448a3ab14610126575b600080fd5b6100b06101b2565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010c600480360360208110156100ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101d6565b60408051918252519081900360200190f35b6100b06101e9565b61012e610205565b005b61010c6004803603602081101561014657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661025f565b6100b06102d0565b6100b06102f4565b61012e6004803603602081101561019557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610374565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006101e182610481565b90505b919050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b61020d6105f6565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556040517fb2f6d9cc189e4fc02519ab5ba6d9455bedc32091e375e8a6383ed45f40653e74908290a2565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006102fe6102d0565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561034357600080fd5b505afa158015610357573d6000803e3d6000fd5b505050506040513d602081101561036d57600080fd5b5051905090565b61037c6105f6565b604080517fbbf7408a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff83169163bbf7408a916024808301926020929190829003018186803b1580156103e857600080fd5b505afa1580156103fc573d6000803e3d6000fd5b505050506040513d602081101561041257600080fd5b5050600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917fb2f6d9cc189e4fc02519ab5ba6d9455bedc32091e375e8a6383ed45f40653e7491a250565b6000805473ffffffffffffffffffffffffffffffffffffffff168061055c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561052757600080fd5b505afa15801561053b573d6000803e3d6000fd5b505050506040513d602081101561055157600080fd5b505191506101e49050565b8073ffffffffffffffffffffffffffffffffffffffff1663bbf7408a846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156105c357600080fd5b505afa1580156105d7573d6000803e3d6000fd5b505050506040513d60208110156105ed57600080fd5b50519392505050565b60006106256000357fffffffff000000000000000000000000000000000000000000000000000000001661025f565b905061063c610634823361063f565b6101916106d5565b50565b60006106496102f4565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b1580156105c357600080fd5b816106e3576106e3816106e7565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfea26469706673582212206b27ad2a466532dabd0579d110aba109922b8778b40c5f4c5df301f531ce278464736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xBBF7408A EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0xE6B3E704 EQ PUSH2 0x17F JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x16F JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x8B0308A EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x25798418 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x63408A90 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0x6448A3AB EQ PUSH2 0x126 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0 PUSH2 0x1B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x10C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x205 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x10C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x25F JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x2F4 JUMP JUMPDEST PUSH2 0x12E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x374 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E1 DUP3 PUSH2 0x481 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x20D PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB2F6D9CC189E4FC02519AB5BA6D9455BEDC32091E375E8A6383ED45F40653E74 SWAP1 DUP3 SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FE PUSH2 0x2D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x357 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x36D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x37C PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xBBF7408A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP2 PUSH4 0xBBF7408A SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 PUSH32 0xB2F6D9CC189E4FC02519AB5BA6D9455BEDC32091E375E8A6383ED45F40653E74 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x55C JUMPI PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x53B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x551 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 POP PUSH2 0x1E4 SWAP1 POP JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xBBF7408A DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x625 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x25F JUMP JUMPDEST SWAP1 POP PUSH2 0x63C PUSH2 0x634 DUP3 CALLER PUSH2 0x63F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x6D5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x649 PUSH2 0x2F4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH2 0x6E3 JUMPI PUSH2 0x6E3 DUP2 PUSH2 0x6E7 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0x27AD2A466532DABD0579D110 0xAB LOG1 MULMOD SWAP3 0x2B DUP8 PUSH25 0xB40C5F4C5DF301F531CE278464736F6C634300070100330000 ", + "sourceMap": "954:2360:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1686:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1987:121;;;;;;;;;;;;;;;;-1:-1:-1;1987:121:50;;;;:::i;:::-;;;;;;;;;;;;;;;;1493:112;;;:::i;3159:153::-;;;:::i;:::-;;2607:430:33;;;;;;;;;;;;;;;;-1:-1:-1;2607:430:33;;;;:::i;1247:79:35:-;;;:::i;1386:109::-;;;:::i;2861:292:50:-;;;;;;;;;;;;;;;;-1:-1:-1;2861:292:50;;;;:::i;1686:95::-;1761:13;1686:95;:::o;1987:121::-;2051:7;2077:24;2096:4;2077:18;:24::i;:::-;2070:31;;1987:121;;;;:::o;1493:112::-;1555:13;1587:11;;;1493:112;:::o;3159:153::-;2276:21:33;:19;:21::i;:::-;3245:1:50::1;3217:30:::0;;;::::1;::::0;;3262:43:::1;::::0;::::1;::::0;3245:1;;3262:43:::1;3159:153::o:0;2607:430:33:-;2979:50;;;2996:22;2979:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2969:61;;;;;2607:430;;;:::o;1247:79:35:-;1313:6;1247:79;:::o;1386:109::-;1432:11;1462:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1462:26:35;;-1:-1:-1;1386:109:35;:::o;2861:292:50:-;2276:21:33;:19;:21::i;:::-;3002:42:50::1;::::0;;;;;3033:10:::1;3002:42;::::0;::::1;::::0;;;:30:::1;::::0;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:30;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;3055:11:50::1;:24:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;3094:52:::1;::::0;3055:24;;3094:52:::1;::::0;::::1;2861:292:::0;:::o;2523:308::-;2588:7;2638:11;;;;2663:34;2659:109;;2727:13;2720:31;;;2752:4;2720:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2720:37:50;;-1:-1:-1;2713:44:50;;-1:-1:-1;2713:44:50;2659:109;2784:14;:34;;;2819:4;2784:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2784:40:50;;2523:308;-1:-1:-1;;;2523:308:50:o;2420:181:33:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9040:3:20;2524:8:33;:70::i;:::-;2420:181;:::o;1501:178:35:-;1589:4;1612:15;:13;:15::i;:::-;:26;;;1639:8;1649:7;1666:4;1612:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;866:101:20;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;1074:3172::-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "methodIdentifiers": { + "adjustedBalanceOf(address)": "25798418", + "adjusted_balance_of(address)": "bbf7408a", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getDelegationImplementation()": "63408a90", + "getVault()": "8d928af8", + "getVotingEscrow()": "08b0308a", + "killDelegation()": "6448a3ab", + "setDelegation(address)": "e6b3e704" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"votingEscrow\",\"type\":\"address\"},{\"internalType\":\"contract IVeDelegation\",\"name\":\"delegation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"DelegationImplementationUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"adjustedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"adjusted_balance_of\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationImplementation\",\"outputs\":[{\"internalType\":\"contract IVeDelegation\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotingEscrow\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IVeDelegation\",\"name\":\"delegation\",\"type\":\"address\"}],\"name\":\"setDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"adjustedBalanceOf(address)\":{\"params\":{\"user\":\"The user to query the adjusted veBAL balance of\"},\"returns\":{\"_0\":\"veBAL balance\"}},\"adjusted_balance_of(address)\":{\"params\":{\"user\":\"The user to query the adjusted veBAL balance of\"},\"returns\":{\"_0\":\"veBAL balance\"}},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adjustedBalanceOf(address)\":{\"notice\":\"Get the adjusted veBAL balance from the active boost delegation contract\"},\"adjusted_balance_of(address)\":{\"notice\":\"Get the adjusted veBAL balance from the active boost delegation contract\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getDelegationImplementation()\":{\"notice\":\"Returns the current delegation implementation contract.\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"},\"getVotingEscrow()\":{\"notice\":\"Returns the Voting Escrow (veBAL) contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/VotingEscrowDelegationProxy.sol\":\"VotingEscrowDelegationProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol\":{\"keccak256\":\"0xd26890d1f590fdace4a101d4d96d12a136ccc0b7b327460800b062e80ffba6b2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ce6c5e66fdb7676fd0048120c4b45fc653cc1035726b7449776519cd39d7a006\",\"dweb:/ipfs/QmV1mw4Q1ck69ZZXx91jgQXuENdtmFqkjtscrC7ofmajww\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]},\"contracts/VotingEscrowDelegationProxy.sol\":{\"keccak256\":\"0x5dcef3e848298234a43740f394b1c197f4deabe7f4a1a0a02fdf33bf7c856079\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dcdbd1f55757addf2d7463ca91028cfd7a62ce5e0a9819c9d6b9bd75121dbced\",\"dweb:/ipfs/QmabGfcqAJnSTxVp2buArK71tjvvYG6LTapp1NufdW9tCm\"]}},\"version\":1}" + } + }, + "contracts/admin/AuthorizerAdaptor.sol": { + "AuthorizerAdaptor": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "performAction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60c060405234801561001057600080fd5b506040516106d33803806106d38339818101604052602081101561003357600080fd5b50516001600055306080526001600160601b031960609190911b1660a05260805160a05160601c61065c610077600039806102ff525080610292525061065c6000f3fe60806040526004361061003f5760003560e01c80634036176a14610044578063851c1bb3146101465780638d928af8146101a4578063aaabadc5146101e2575b600080fd5b6100d16004803603604081101561005a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561009257600080fd5b8201836020820111156100a457600080fd5b803590602001918460018302840111640100000000831117156100c657600080fd5b5090925090506101f7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010b5781810151838201526020016100f3565b50505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015257600080fd5b506101926004803603602081101561016957600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661028c565b60408051918252519081900360200190f35b3480156101b057600080fd5b506101b96102fd565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ee57600080fd5b506101b9610321565b60606102016103a1565b60643561022261021a6102138361028c565b33886103ba565b610191610484565b61027a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505073ffffffffffffffffffffffffffffffffffffffff881691905034610496565b915050610285610582565b9392505050565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061032b6102fd565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561037057600080fd5b505afa158015610384573d6000803e3d6000fd5b505050506040513d602081101561039a57600080fd5b5051905090565b6103b360026000541415610190610484565b6002600055565b60006103c4610321565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848585856040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b15801561045057600080fd5b505afa158015610464573d6000803e3d6000fd5b505050506040513d602081101561047a57600080fd5b5051949350505050565b816104925761049281610589565b5050565b6060600060608573ffffffffffffffffffffffffffffffffffffffff1684866040518082805190602001908083835b6020831061050257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016104c5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610564576040519150601f19603f3d011682016040523d82523d6000602084013e610569565b606091505b509150915061057882826105f6565b9695505050505050565b6001600055565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60608215610605575080610620565b8151156106155781518083602001fd5b6106206101ae610589565b9291505056fea264697066735822122024460d235e68fcafb38c36dc7a719ea2cc2e828007a65324d9a4e59b78ead60964736f6c63430007010033", + "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6D3 CODESIZE SUB DUP1 PUSH2 0x6D3 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x0 SSTORE ADDRESS PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x65C PUSH2 0x77 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2FF MSTORE POP DUP1 PUSH2 0x292 MSTORE POP PUSH2 0x65C PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4036176A EQ PUSH2 0x44 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x1E2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1F7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x192 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B9 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B9 PUSH2 0x321 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x201 PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH2 0x222 PUSH2 0x21A PUSH2 0x213 DUP4 PUSH2 0x28C JUMP JUMPDEST CALLER DUP9 PUSH2 0x3BA JUMP JUMPDEST PUSH2 0x191 PUSH2 0x484 JUMP JUMPDEST PUSH2 0x27A 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 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 SWAP1 POP CALLVALUE PUSH2 0x496 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x285 PUSH2 0x582 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32B PUSH2 0x2FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x384 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x3B3 PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x484 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C4 PUSH2 0x321 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x464 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x47A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x492 JUMPI PUSH2 0x492 DUP2 PUSH2 0x589 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP7 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x502 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x564 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 0x569 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x578 DUP3 DUP3 PUSH2 0x5F6 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO PUSH2 0x605 JUMPI POP DUP1 PUSH2 0x620 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x615 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST PUSH2 0x620 PUSH2 0x1AE PUSH2 0x589 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 CHAINID 0xD 0x23 0x5E PUSH9 0xFCAFB38C36DC7A719E LOG2 0xCC 0x2E DUP3 DUP1 SMOD 0xA6 MSTORE8 0x24 0xD9 LOG4 0xE5 SWAP12 PUSH25 0xEAD60964736F6C634300070100330000000000000000000000 ", + "sourceMap": "1715:3320:51:-:0;;;1911:237;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1911:237:51;2070:1:44;2175:7;:22;2110:4:51;2061:56;;-1:-1:-1;;;;;;2127:14:51;;;;;;;;1715:3320;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "6437": [ + { + "length": 32, + "start": 658 + } + ], + "6439": [ + { + "length": 32, + "start": 767 + } + ] + }, + "linkReferences": {}, + "object": "60806040526004361061003f5760003560e01c80634036176a14610044578063851c1bb3146101465780638d928af8146101a4578063aaabadc5146101e2575b600080fd5b6100d16004803603604081101561005a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561009257600080fd5b8201836020820111156100a457600080fd5b803590602001918460018302840111640100000000831117156100c657600080fd5b5090925090506101f7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010b5781810151838201526020016100f3565b50505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015257600080fd5b506101926004803603602081101561016957600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661028c565b60408051918252519081900360200190f35b3480156101b057600080fd5b506101b96102fd565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101ee57600080fd5b506101b9610321565b60606102016103a1565b60643561022261021a6102138361028c565b33886103ba565b610191610484565b61027a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505073ffffffffffffffffffffffffffffffffffffffff881691905034610496565b915050610285610582565b9392505050565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061032b6102fd565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561037057600080fd5b505afa158015610384573d6000803e3d6000fd5b505050506040513d602081101561039a57600080fd5b5051905090565b6103b360026000541415610190610484565b6002600055565b60006103c4610321565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848585856040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b15801561045057600080fd5b505afa158015610464573d6000803e3d6000fd5b505050506040513d602081101561047a57600080fd5b5051949350505050565b816104925761049281610589565b5050565b6060600060608573ffffffffffffffffffffffffffffffffffffffff1684866040518082805190602001908083835b6020831061050257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016104c5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610564576040519150601f19603f3d011682016040523d82523d6000602084013e610569565b606091505b509150915061057882826105f6565b9695505050505050565b6001600055565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60608215610605575080610620565b8151156106155781518083602001fd5b6106206101ae610589565b9291505056fea264697066735822122024460d235e68fcafb38c36dc7a719ea2cc2e828007a65324d9a4e59b78ead60964736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4036176A EQ PUSH2 0x44 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x1E2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1F7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x192 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B9 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B9 PUSH2 0x321 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x201 PUSH2 0x3A1 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH2 0x222 PUSH2 0x21A PUSH2 0x213 DUP4 PUSH2 0x28C JUMP JUMPDEST CALLER DUP9 PUSH2 0x3BA JUMP JUMPDEST PUSH2 0x191 PUSH2 0x484 JUMP JUMPDEST PUSH2 0x27A 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 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 SWAP1 POP CALLVALUE PUSH2 0x496 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x285 PUSH2 0x582 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32B PUSH2 0x2FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x384 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x3B3 PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x484 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C4 PUSH2 0x321 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x464 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x47A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x492 JUMPI PUSH2 0x492 DUP2 PUSH2 0x589 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP7 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x502 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x564 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 0x569 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x578 DUP3 DUP3 PUSH2 0x5F6 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ISZERO PUSH2 0x605 JUMPI POP DUP1 PUSH2 0x620 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x615 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST PUSH2 0x620 PUSH2 0x1AE PUSH2 0x589 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 CHAINID 0xD 0x23 0x5E PUSH9 0xFCAFB38C36DC7A719E LOG2 0xCC 0x2E DUP3 DUP1 SMOD 0xA6 MSTORE8 0x24 0xD9 LOG4 0xE5 SWAP12 PUSH25 0xEAD60964736F6C634300070100330000000000000000000000 ", + "sourceMap": "1715:3320:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3775:1258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3775:1258:51;;-1:-1:-1;3775:1258:51;-1:-1:-1;3775:1258:51;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3271:162;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3271:162:51;;;;:::i;:::-;;;;;;;;;;;;;;;;2212:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2360:118;;;;;;;;;;;;;:::i;3775:1258::-;3923:12;2613:20:44;:18;:20::i;:::-;4757:3:51::1;4744:17;4781:91;4790:54;4802:21;4744:17:::0;4802:11:::1;:21::i;:::-;4825:10;4837:6;4790:11;:54::i;:::-;9040:3:20;4781:8:51;:91::i;:::-;4981:45;5010:4;;4981:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;4981:28:51::1;::::0;::::1;::::0;;-1:-1:-1;5016:9:51::1;4981:28;:45::i;:::-;4974:52;;;2654:19:44::0;:17;:19::i;:::-;3775:1258:51;;;;;:::o;3271:162::-;3375:50;;;3392:22;3375:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3365:61;;;;;3271:162;;;:::o;2212:88::-;2287:6;2212:88;:::o;2360:118::-;2415:11;2445:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2445:26:51;;-1:-1:-1;2360:118:51;:::o;2686:271:44:-;2809:48;2113:1;2818:7;;:19;;8984:3:20;2809:8:44;:48::i;:::-;2113:1;2932:7;:18;2686:271::o;2484:206:51:-;2608:4;2631:15;:13;:15::i;:::-;:26;;;2658:8;2668:7;2677:5;2631:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2631:52:51;;2484:206;-1:-1:-1;;;;2484:206:51:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;4012:348:37:-;4141:12;4225;4239:23;4266:6;:11;;4286:5;4294:4;4266:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4224:75;;;;4316:37;4333:7;4342:10;4316:16;:37::i;:::-;4309:44;4012:348;-1:-1:-1;;;;;;4012:348:37:o;2963:208:44:-;2070:1;3142:7;:22;2963:208::o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14;5057:714:37;5145:12;5173:7;5169:596;;;-1:-1:-1;5203:10:37;5196:17;;5169:596;5314:17;;:21;5310:445;;5571:10;5565:17;5631:15;5618:10;5614:2;5610:19;5603:44;5520:145;5703:37;10861:3:20;5703:7:37;:37::i;:::-;5057:714;;;;:::o" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getVault()": "8d928af8", + "performAction(address,bytes)": "4036176a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"performAction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"When calculating the actionId to call a function on a target contract, it must be calculated as if it were to be called on this adaptor. This can be done by passing the function selector to the `getActionId` function.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"As the contracts managed by this adaptor don't have action ID disambiguators, we use the adaptor's globally. This means that contracts with the same function selector will have a matching action ID: if granularity is required then permissions must not be granted globally in the Authorizer.\",\"params\":{\"selector\":\"- The 4 byte selector of the function to be called using `performAction`\"},\"returns\":{\"_0\":\"The associated action ID\"}},\"performAction(address,bytes)\":{\"params\":{\"data\":\"- Calldata to be sent to the target contract\",\"target\":\"- Address of the contract to be called\"},\"returns\":{\"_0\":\"The bytes encoded return value from the performed function call\"}}},\"title\":\"Authorizer Adaptor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action ID associated with calling a given function through this adaptor\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"},\"performAction(address,bytes)\":{\"notice\":\"Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\"}},\"notice\":\"This contract is intended to act as an adaptor between systems which expect a single admin address and the Balancer Authorizer such that the Authorizer may grant/revoke admin powers to unlimited addresses. The permissions the Authorizer can grant are granular such they may be global or specific to a particular contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/admin/AuthorizerAdaptor.sol\":\"AuthorizerAdaptor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol\":{\"keccak256\":\"0xd0124aa262584bcdc163089547074252ace79201c02de2573fc8154cdc024b25\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://333957f2afd70aef1757e5e84a8ed6e5048eb8233448a3c67e7111ae9f01b6bc\",\"dweb:/ipfs/QmSQcuZH5rkS8D1PGt6tJZpkPM8onWPwNe24iEVjZWidt4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/admin/AuthorizerAdaptor.sol\":{\"keccak256\":\"0xc096d94aff377515b731e25105e736718c0494288a566078e1d04e7565a73e75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bb9fb93808eef0feb360a30c02995b8e32fae05a1c9a211042b0afbab18b88e1\",\"dweb:/ipfs/QmdGcgzH4rqPu4XePRCimxixUeirC9FmmcUAeu6wBcZCK3\"]}},\"version\":1}" + } + }, + "contracts/admin/ChildChainGaugeTokenAdder.sol": { + "ChildChainGaugeTokenAdder": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IChildChainLiquidityGaugeFactory", + "name": "gaugeFactory", + "type": "address" + }, + { + "internalType": "contract IAuthorizerAdaptor", + "name": "authorizerAdaptor", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "contract IRewardsOnlyGauge", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "addTokenToGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizerAdaptor", + "outputs": [ + { + "internalType": "contract IAuthorizerAdaptor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "61010060405234801561001157600080fd5b50604051610e97380380610e97833981016040819052610030916100cd565b806001600160a01b0316638d928af86040518163ffffffff1660e01b815260040160206040518083038186803b15801561006957600080fd5b505afa15801561007d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a19190610106565b306080526001600160601b0319606091821b811660a05291811b821660c0529190911b1660e052610141565b600080604083850312156100df578182fd5b82516100ea81610129565b60208401519092506100fb81610129565b809150509250929050565b600060208284031215610117578081fd5b815161012281610129565b9392505050565b6001600160a01b038116811461013e57600080fd5b50565b60805160a05160601c60c05160601c60e05160601c610d0a61018d60003980610216528061031a52508061058d52806105fa528061077a52508061012352508060d35250610d0a6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063aaabadc511610050578063aaabadc5146100aa578063d411ee4d146100b2578063e758d36b146100c757610067565b8063851c1bb31461006c5780638d928af814610095575b600080fd5b61007f61007a366004610952565b6100cf565b60405161008c9190610b54565b60405180910390f35b61009d610121565b60405161008c9190610ac5565b61009d610145565b6100c56100c0366004610a4b565b6101d1565b005b61009d61058b565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610104929190610a95565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061014f610121565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561019457600080fd5b505afa1580156101a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cc9190610916565b905090565b6101d96105af565b6040517fce3cc8bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ce3cc8bd9061024b908690600401610ac5565b60206040518083038186803b15801561026357600080fd5b505afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610932565b6102da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d190610c4f565b60405180910390fd5b6040517f90b2008700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906390b200879061034f908790600401610ac5565b60206040518083038186803b15801561036757600080fd5b505afa15801561037b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039f9190610916565b90508373ffffffffffffffffffffffffffffffffffffffff1663bf88a6ff6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103e757600080fd5b505afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190610916565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d190610c18565b61048e8184846105f8565b6104966108f7565b60005b6008811015610578576040517f54c49fe900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906354c49fe9906104f4908490600401610b54565b60206040518083038186803b15801561050c57600080fd5b505afa158015610520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105449190610916565b82826008811061055057fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020929092020152600101610499565b50610584858383610760565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105de6000357fffffffff00000000000000000000000000000000000000000000000000000000166100cf565b90506105f56105ed82336107db565b610191610878565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634036176a8463661ab0b260e01b858562093a8060405160240161065593929190610be7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526106e69291600401610ae6565b600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261075a9190810190610992565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634036176a9085907f47d2d5d30000000000000000000000000000000000000000000000000000000090610655908790631afe22a6908890602401610b89565b60006107e5610145565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161082193929190610b5d565b60206040518083038186803b15801561083957600080fd5b505afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190610932565b9392505050565b81610886576108868161088a565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6040518061010001604052806008906020820280368337509192915050565b600060208284031215610927578081fd5b815161087181610cb2565b600060208284031215610943578081fd5b81518015158114610871578182fd5b600060208284031215610963578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610871578182fd5b6000602082840312156109a3578081fd5b815167ffffffffffffffff808211156109ba578283fd5b818401915084601f8301126109cd578283fd5b8151818111156109db578384fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715610a19578586fd5b604052818152838201602001871015610a30578485fd5b610a41826020830160208701610c86565b9695505050505050565b600080600060608486031215610a5f578182fd5b8335610a6a81610cb2565b92506020840135610a7a81610cb2565b91506040840135610a8a81610cb2565b809150509250925092565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff84168252604060208301528251806040840152610b21816060850160208701610c86565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60006101408201905073ffffffffffffffffffffffffffffffffffffffff808616835260208581850152604084018560005b6008811015610bda578151851683529183019190830190600101610bbb565b5050505050949350505050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6020808252601b908201527f4e6f74206f726967696e616c2067617567652073747265616d65720000000000604082015260600190565b6020808252600d908201527f496e76616c696420676175676500000000000000000000000000000000000000604082015260600190565b60005b83811015610ca1578181015183820152602001610c89565b8381111561075a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146105f557600080fdfea2646970667358221220bed565676fadcba70cee2ec746a35ec25216de48e621946c30699a81e3ef777164736f6c63430007010033", + "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xE97 CODESIZE SUB DUP1 PUSH2 0xE97 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8D928AF8 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xA1 SWAP2 SWAP1 PUSH2 0x106 JUMP JUMPDEST ADDRESS PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH1 0xA0 MSTORE SWAP2 DUP2 SHL DUP3 AND PUSH1 0xC0 MSTORE SWAP2 SWAP1 SWAP2 SHL AND PUSH1 0xE0 MSTORE PUSH2 0x141 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0xEA DUP2 PUSH2 0x129 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0xFB DUP2 PUSH2 0x129 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x117 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x122 DUP2 PUSH2 0x129 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x13E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0xD0A PUSH2 0x18D PUSH1 0x0 CODECOPY DUP1 PUSH2 0x216 MSTORE DUP1 PUSH2 0x31A MSTORE POP DUP1 PUSH2 0x58D MSTORE DUP1 PUSH2 0x5FA MSTORE DUP1 PUSH2 0x77A MSTORE POP DUP1 PUSH2 0x123 MSTORE POP DUP1 PUSH1 0xD3 MSTORE POP PUSH2 0xD0A 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 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xD411EE4D EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0xE758D36B EQ PUSH2 0xC7 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x95 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x952 JUMP JUMPDEST PUSH2 0xCF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xB54 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9D PUSH2 0x121 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xAC5 JUMP JUMPDEST PUSH2 0x9D PUSH2 0x145 JUMP JUMPDEST PUSH2 0xC5 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x1D1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9D PUSH2 0x58B JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x104 SWAP3 SWAP2 SWAP1 PUSH2 0xA95 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 PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14F PUSH2 0x121 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x1CC SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1D9 PUSH2 0x5AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xCE3CC8BD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0xCE3CC8BD SWAP1 PUSH2 0x24B SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xAC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x277 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x29B SWAP2 SWAP1 PUSH2 0x932 JUMP JUMPDEST PUSH2 0x2DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D1 SWAP1 PUSH2 0xC4F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x90B2008700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x90B20087 SWAP1 PUSH2 0x34F SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xAC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x39F SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xBF88A6FF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x41F SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x483 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D1 SWAP1 PUSH2 0xC18 JUMP JUMPDEST PUSH2 0x48E DUP2 DUP5 DUP5 PUSH2 0x5F8 JUMP JUMPDEST PUSH2 0x496 PUSH2 0x8F7 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH32 0x54C49FE900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x54C49FE9 SWAP1 PUSH2 0x4F4 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0xB54 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x520 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x544 SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x550 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 SWAP1 SWAP3 MUL ADD MSTORE PUSH1 0x1 ADD PUSH2 0x499 JUMP JUMPDEST POP PUSH2 0x584 DUP6 DUP4 DUP4 PUSH2 0x760 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DE PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xCF JUMP JUMPDEST SWAP1 POP PUSH2 0x5F5 PUSH2 0x5ED DUP3 CALLER PUSH2 0x7DB JUMP JUMPDEST PUSH2 0x191 PUSH2 0x878 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4036176A DUP5 PUSH4 0x661AB0B2 PUSH1 0xE0 SHL DUP6 DUP6 PUSH3 0x93A80 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x655 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xBE7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP5 DUP6 AND OR SWAP1 MSTORE MLOAD PUSH1 0xE0 DUP6 SWAP1 SHL SWAP1 SWAP3 AND DUP3 MSTORE PUSH2 0x6E6 SWAP3 SWAP2 PUSH1 0x4 ADD PUSH2 0xAE6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x700 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x714 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 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x75A SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x992 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x4036176A SWAP1 DUP6 SWAP1 PUSH32 0x47D2D5D300000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x655 SWAP1 DUP8 SWAP1 PUSH4 0x1AFE22A6 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E5 PUSH2 0x145 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x821 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xB5D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x84D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x871 SWAP2 SWAP1 PUSH2 0x932 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x886 JUMPI PUSH2 0x886 DUP2 PUSH2 0x88A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x927 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x871 DUP2 PUSH2 0xCB2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x943 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x871 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x963 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x871 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9A3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9BA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x9CD JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x9DB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0xA19 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP8 LT ISZERO PUSH2 0xA30 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xA41 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xC86 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA5F JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xA6A DUP2 PUSH2 0xCB2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xA7A DUP2 PUSH2 0xCB2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0xA8A DUP2 PUSH2 0xCB2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE DUP3 MLOAD DUP1 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xB21 DUP2 PUSH1 0x60 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x60 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x140 DUP3 ADD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP4 MSTORE PUSH1 0x20 DUP6 DUP2 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD DUP6 PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0xBDA JUMPI DUP2 MLOAD DUP6 AND DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBBB JUMP JUMPDEST POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x4E6F74206F726967696E616C2067617567652073747265616D65720000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676500000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCA1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC89 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x75A JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x5F5 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE 0xD5 PUSH6 0x676FADCBA70C 0xEE 0x2E 0xC7 CHAINID LOG3 0x5E 0xC2 MSTORE AND 0xDE 0x48 0xE6 0x21 SWAP5 PUSH13 0x30699A81E3EF777164736F6C63 NUMBER STOP SMOD ADD STOP CALLER ", + "sourceMap": "1222:3082:52:-:0;;;1805:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1934:17;-1:-1:-1;;;;;1934:26:52;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1143:4:35;2049:46:33;;-1:-1:-1;;;;;;1162:14:35::1;::::0;;;;;::::1;::::0;1978:38:52;;;;;::::1;::::0;2026:28;;;;;::::1;::::0;1222:3082;;588:529:-1;;;785:2;773:9;764:7;760:23;756:32;753:2;;;-1:-1;;791:12;753:2;320:6;314:13;332:73;399:5;332:73;:::i;:::-;994:2;1069:22;;108:13;843:114;;-1:-1;126:58;108:13;126:58;:::i;:::-;1002:99;;;;747:370;;;;;:::o;1124:293::-;;1254:2;1242:9;1233:7;1229:23;1225:32;1222:2;;;-1:-1;;1260:12;1222:2;516:6;510:13;528:48;570:5;528:48;:::i;:::-;1312:89;1216:201;-1:-1;;;1216:201::o;2024:167::-;-1:-1;;;;;1958:54;;2108:60;;2098:2;;2182:1;;2172:12;2098:2;2092:99;:::o;:::-;1222:3082:52;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2297": [ + { + "length": 32, + "start": 211 + } + ], + "2486": [ + { + "length": 32, + "start": 291 + } + ], + "6589": [ + { + "length": 32, + "start": 1421 + }, + { + "length": 32, + "start": 1530 + }, + { + "length": 32, + "start": 1914 + } + ], + "6591": [ + { + "length": 32, + "start": 534 + }, + { + "length": 32, + "start": 794 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100675760003560e01c8063aaabadc511610050578063aaabadc5146100aa578063d411ee4d146100b2578063e758d36b146100c757610067565b8063851c1bb31461006c5780638d928af814610095575b600080fd5b61007f61007a366004610952565b6100cf565b60405161008c9190610b54565b60405180910390f35b61009d610121565b60405161008c9190610ac5565b61009d610145565b6100c56100c0366004610a4b565b6101d1565b005b61009d61058b565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610104929190610a95565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061014f610121565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561019457600080fd5b505afa1580156101a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cc9190610916565b905090565b6101d96105af565b6040517fce3cc8bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ce3cc8bd9061024b908690600401610ac5565b60206040518083038186803b15801561026357600080fd5b505afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610932565b6102da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d190610c4f565b60405180910390fd5b6040517f90b2008700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906390b200879061034f908790600401610ac5565b60206040518083038186803b15801561036757600080fd5b505afa15801561037b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039f9190610916565b90508373ffffffffffffffffffffffffffffffffffffffff1663bf88a6ff6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103e757600080fd5b505afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190610916565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d190610c18565b61048e8184846105f8565b6104966108f7565b60005b6008811015610578576040517f54c49fe900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906354c49fe9906104f4908490600401610b54565b60206040518083038186803b15801561050c57600080fd5b505afa158015610520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105449190610916565b82826008811061055057fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020929092020152600101610499565b50610584858383610760565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105de6000357fffffffff00000000000000000000000000000000000000000000000000000000166100cf565b90506105f56105ed82336107db565b610191610878565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634036176a8463661ab0b260e01b858562093a8060405160240161065593929190610be7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526106e69291600401610ae6565b600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261075a9190810190610992565b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634036176a9085907f47d2d5d30000000000000000000000000000000000000000000000000000000090610655908790631afe22a6908890602401610b89565b60006107e5610145565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161082193929190610b5d565b60206040518083038186803b15801561083957600080fd5b505afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190610932565b9392505050565b81610886576108868161088a565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6040518061010001604052806008906020820280368337509192915050565b600060208284031215610927578081fd5b815161087181610cb2565b600060208284031215610943578081fd5b81518015158114610871578182fd5b600060208284031215610963578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610871578182fd5b6000602082840312156109a3578081fd5b815167ffffffffffffffff808211156109ba578283fd5b818401915084601f8301126109cd578283fd5b8151818111156109db578384fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715610a19578586fd5b604052818152838201602001871015610a30578485fd5b610a41826020830160208701610c86565b9695505050505050565b600080600060608486031215610a5f578182fd5b8335610a6a81610cb2565b92506020840135610a7a81610cb2565b91506040840135610a8a81610cb2565b809150509250925092565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff84168252604060208301528251806040840152610b21816060850160208701610c86565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60006101408201905073ffffffffffffffffffffffffffffffffffffffff808616835260208581850152604084018560005b6008811015610bda578151851683529183019190830190600101610bbb565b5050505050949350505050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b6020808252601b908201527f4e6f74206f726967696e616c2067617567652073747265616d65720000000000604082015260600190565b6020808252600d908201527f496e76616c696420676175676500000000000000000000000000000000000000604082015260600190565b60005b83811015610ca1578181015183820152602001610c89565b8381111561075a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146105f557600080fdfea2646970667358221220bed565676fadcba70cee2ec746a35ec25216de48e621946c30699a81e3ef777164736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xD411EE4D EQ PUSH2 0xB2 JUMPI DUP1 PUSH4 0xE758D36B EQ PUSH2 0xC7 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x95 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x952 JUMP JUMPDEST PUSH2 0xCF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xB54 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9D PUSH2 0x121 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0xAC5 JUMP JUMPDEST PUSH2 0x9D PUSH2 0x145 JUMP JUMPDEST PUSH2 0xC5 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x1D1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9D PUSH2 0x58B JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x104 SWAP3 SWAP2 SWAP1 PUSH2 0xA95 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 PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14F PUSH2 0x121 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x1CC SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1D9 PUSH2 0x5AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xCE3CC8BD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0xCE3CC8BD SWAP1 PUSH2 0x24B SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xAC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x277 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x29B SWAP2 SWAP1 PUSH2 0x932 JUMP JUMPDEST PUSH2 0x2DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D1 SWAP1 PUSH2 0xC4F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x90B2008700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x90B20087 SWAP1 PUSH2 0x34F SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0xAC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x367 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x39F SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xBF88A6FF 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x41F SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x483 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D1 SWAP1 PUSH2 0xC18 JUMP JUMPDEST PUSH2 0x48E DUP2 DUP5 DUP5 PUSH2 0x5F8 JUMP JUMPDEST PUSH2 0x496 PUSH2 0x8F7 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH32 0x54C49FE900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x54C49FE9 SWAP1 PUSH2 0x4F4 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0xB54 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x50C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x520 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x544 SWAP2 SWAP1 PUSH2 0x916 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x550 JUMPI INVALID JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 SWAP1 SWAP3 MUL ADD MSTORE PUSH1 0x1 ADD PUSH2 0x499 JUMP JUMPDEST POP PUSH2 0x584 DUP6 DUP4 DUP4 PUSH2 0x760 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5DE PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xCF JUMP JUMPDEST SWAP1 POP PUSH2 0x5F5 PUSH2 0x5ED DUP3 CALLER PUSH2 0x7DB JUMP JUMPDEST PUSH2 0x191 PUSH2 0x878 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4036176A DUP5 PUSH4 0x661AB0B2 PUSH1 0xE0 SHL DUP6 DUP6 PUSH3 0x93A80 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x655 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xBE7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP5 DUP6 AND OR SWAP1 MSTORE MLOAD PUSH1 0xE0 DUP6 SWAP1 SHL SWAP1 SWAP3 AND DUP3 MSTORE PUSH2 0x6E6 SWAP3 SWAP2 PUSH1 0x4 ADD PUSH2 0xAE6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x700 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x714 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 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x75A SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x992 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x4036176A SWAP1 DUP6 SWAP1 PUSH32 0x47D2D5D300000000000000000000000000000000000000000000000000000000 SWAP1 PUSH2 0x655 SWAP1 DUP8 SWAP1 PUSH4 0x1AFE22A6 SWAP1 DUP9 SWAP1 PUSH1 0x24 ADD PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E5 PUSH2 0x145 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x821 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xB5D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x839 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x84D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x871 SWAP2 SWAP1 PUSH2 0x932 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x886 JUMPI PUSH2 0x886 DUP2 PUSH2 0x88A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x927 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x871 DUP2 PUSH2 0xCB2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x943 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x871 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x963 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x871 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9A3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9BA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x9CD JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x9DB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0xA19 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP8 LT ISZERO PUSH2 0xA30 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0xA41 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xC86 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA5F JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xA6A DUP2 PUSH2 0xCB2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xA7A DUP2 PUSH2 0xCB2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0xA8A DUP2 PUSH2 0xCB2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE DUP3 MLOAD DUP1 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0xB21 DUP2 PUSH1 0x60 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x60 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x140 DUP3 ADD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP4 MSTORE PUSH1 0x20 DUP6 DUP2 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD DUP6 PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0xBDA JUMPI DUP2 MLOAD DUP6 AND DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBBB JUMP JUMPDEST POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x4E6F74206F726967696E616C2067617567652073747265616D65720000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676500000000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCA1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC89 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x75A JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x5F5 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE 0xD5 PUSH6 0x676FADCBA70C 0xEE 0x2E 0xC7 CHAINID LOG3 0x5E 0xC2 MSTORE AND 0xDE 0x48 0xE6 0x21 SWAP5 PUSH13 0x30699A81E3EF777164736F6C63 NUMBER STOP SMOD ADD STOP CALLER ", + "sourceMap": "1222:3082:52:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2607:430:33;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1247:79:35;;;:::i;:::-;;;;;;;:::i;1386:109::-;;;:::i;2348:1226:52:-;;;;;;:::i;:::-;;:::i;:::-;;2154:117;;;:::i;2607:430:33:-;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;1247:79:35:-;1313:6;1247:79;:::o;1386:109::-;1432:11;1462:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1455:33;;1386:109;:::o;2348:1226:52:-;2276:21:33;:19;:21::i;:::-;2509:48:52::1;::::0;;;;:32:::1;:13;:32;::::0;::::1;::::0;:48:::1;::::0;2550:5;;2509:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2501:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2636:46;::::0;;;;2585:28:::1;::::0;2636:30:::1;:13;:30;::::0;::::1;::::0;:46:::1;::::0;2675:5;;2636:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2585:98;;2713:5;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2701:35;;:8;:35;;;2693:75;;;;;;;;;;;;:::i;:::-;2884:55;2904:8;2914:11;2927;2884:19;:55::i;:::-;3286:39;;:::i;:::-;3340:9;3335:106;1608:1;3351;:15;3335:106;;;3405:25;::::0;;;;:22:::1;::::0;::::1;::::0;::::1;::::0;:25:::1;::::0;3428:1;;3405:25:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3387:12;3400:1;3387:15;;;;;;;:43;::::0;;::::1;:15;::::0;;;::::1;;:43:::0;3368:3:::1;;3335:106;;;;3512:55;3537:5;3544:8;3554:12;3512:24;:55::i;:::-;2307:1:33;;2348:1226:52::0;;;:::o;2154:117::-;2246:18;2154:117;:::o;2420:181:33:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9040:3:20;2524:8:33;:70::i;:::-;2420:181;:::o;3580:349:52:-;3728:18;:32;;;3782:8;3828:39;;;3869:11;3882;1659:7;3805:107;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3728:194;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3580:349;;;:::o;3935:367::-;4187:98;;4113:32;:18;:32;;;;4167:5;;4210:38;;4187:98;;4250:8;;1526:37;;4272:12;;4187:98;;;:::i;1501:178:35:-;1589:4;1612:15;:13;:15::i;:::-;:26;;;1639:8;1649:7;1666:4;1612:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1605:67;1501:178;-1:-1:-1;;;1501:178:35:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;1074:3172::-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;1905:263::-;;2020:2;2008:9;1999:7;1995:23;1991:32;1988:2;;;-1:-1;;2026:12;1988:2;226:6;220:13;238:33;265:5;238:33;:::i;2175:257::-;;2287:2;2275:9;2266:7;2262:23;2258:32;2255:2;;;-1:-1;;2293:12;2255:2;364:6;358:13;17945:5;14734:13;14727:21;17923:5;17920:32;17910:2;;-1:-1;;17956:12;2439:239;;2542:2;2530:9;2521:7;2517:23;2513:32;2510:2;;;-1:-1;;2548:12;2510:2;497:6;484:20;14911:66;18067:5;14900:78;18043:5;18040:34;18030:2;;-1:-1;;18078:12;2685:360;;2809:2;2797:9;2788:7;2784:23;2780:32;2777:2;;;-1:-1;;2815:12;2777:2;2866:17;2860:24;2904:18;;2896:6;2893:30;2890:2;;;-1:-1;;2926:12;2890:2;3012:6;3001:9;2997:22;;;666:3;659:4;651:6;647:17;643:27;633:2;;-1:-1;;674:12;633:2;714:6;708:13;2904:18;13380:6;13377:30;13374:2;;;-1:-1;;13410:12;13374:2;13044;13038:9;2809:2;13483:9;659:4;13468:6;13464:17;13460:33;13074:6;13070:17;;13181:6;13169:10;13166:22;2904:18;13133:10;13130:34;13127:62;13124:2;;;-1:-1;;13192:12;13124:2;13044;13211:22;806:21;;;906:16;;;2809:2;906:16;903:25;-1:-1;900:2;;;-1:-1;;931:12;900:2;951:39;983:6;2809:2;882:5;878:16;2809:2;848:6;844:17;951:39;:::i;:::-;2946:83;2771:274;-1:-1;;;;;;2771:274::o;3986:571::-;;;;4164:2;4152:9;4143:7;4139:23;4135:32;4132:2;;;-1:-1;;4170:12;4132:2;1823:6;1810:20;1835:58;1887:5;1835:58;:::i;:::-;4222:88;-1:-1;4347:2;4401:22;;1462:20;1487:48;1462:20;1487:48;:::i;:::-;4355:78;-1:-1;4470:2;4509:22;;72:20;97:33;72:20;97:33;:::i;:::-;4478:63;;;;4126:431;;;;;:::o;8264:387::-;5751:37;;;14911:66;14900:78;8515:2;8506:12;;6046:56;8615:11;;;8406:245::o;8658:222::-;15542:42;15531:54;;;;4847:37;;8785:2;8770:18;;8756:124::o;8887:417::-;;15542:42;14650:5;15531:54;4854:3;4847:37;9060:2;9178;9167:9;9163:18;9156:48;6256:5;13909:12;14342:6;9060:2;9049:9;9045:18;14330:19;6349:52;6394:6;14370:14;9049:9;14370:14;9178:2;6375:5;6371:16;6349:52;:::i;:::-;17723:2;17703:14;17719:7;17699:28;6413:39;;;;14370:14;6413:39;;9031:273;-1:-1;;;9031:273::o;9311:222::-;5751:37;;;9438:2;9423:18;;9409:124::o;9540:444::-;5751:37;;;15542:42;15531:54;;;9887:2;9872:18;;4847:37;15531:54;9970:2;9955:18;;4847:37;9723:2;9708:18;;9694:290::o;10539:621::-;;10810:3;10799:9;10795:19;10787:27;;15542:42;;14650:5;15531:54;6567:3;6560:75;11002:2;5781:5;11002:2;10991:9;10987:18;5751:37;11146:2;11135:9;11131:18;5345:21;-1:-1;5372:288;13801:4;5394:1;5391:13;5372:288;;;5458:13;;15531:54;;6560:75;;4748:14;;;;14052;;;;5419:1;5412:9;5372:288;;;5376:14;;;;;10781:379;;;;;;:::o;11167:474::-;15542:42;15531:54;;;6560:75;;15531:54;;;;11544:2;11529:18;;4847:37;11627:2;11612:18;;5751:37;;;;11365:2;11350:18;;11336:305::o;11907:416::-;12107:2;12121:47;;;7711:2;12092:18;;;14330:19;7747:29;14370:14;;;7727:50;7796:12;;;12078:245::o;12330:416::-;12530:2;12544:47;;;8047:2;12515:18;;;14330:19;8083:15;14370:14;;;8063:36;8118:12;;;12501:245::o;17198:268::-;17263:1;17270:101;17284:6;17281:1;17278:13;17270:101;;;17351:11;;;17345:18;17332:11;;;17325:39;17306:2;17299:10;17270:101;;;17386:6;17383:1;17380:13;17377:2;;;-1:-1;;17263:1;17433:16;;17426:27;17247:219::o;17740:117::-;15542:42;17827:5;15531:54;17802:5;17799:35;17789:2;;17848:1;;17838:12" + }, + "methodIdentifiers": { + "addTokenToGauge(address,address,address)": "d411ee4d", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getAuthorizerAdaptor()": "e758d36b", + "getVault()": "8d928af8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IChildChainLiquidityGaugeFactory\",\"name\":\"gaugeFactory\",\"type\":\"address\"},{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"authorizerAdaptor\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IRewardsOnlyGauge\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"addTokenToGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizerAdaptor\",\"outputs\":[{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"title\":\"ChildChainGaugeTokenAdder\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addTokenToGauge(address,address,address)\":{\"notice\":\"Adds a new token to a RewardsOnlyGauge.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getAuthorizerAdaptor()\":{\"notice\":\"Returns the address of the Authorizer adaptor contract.\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"}},\"notice\":\"Allows atomically adding a new reward token to a RewardsOnlyGauge while ensuring that it remains in sync with its ChildChainStreamer.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/admin/ChildChainGaugeTokenAdder.sol\":\"ChildChainGaugeTokenAdder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol\":{\"keccak256\":\"0xe551b5fd237d7c07b4f767b8bd6c58442efa401dfb78b58923b2f3c2cf772e13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83d69bd6f54f255076db95c260acc7b5bab6df94cf8ae8bf0097e43ca6a8f085\",\"dweb:/ipfs/QmcxcN5ydnGGpBg6uKG723AXWJK8XeXQoDHYEHtD1AkP9J\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol\":{\"keccak256\":\"0xf5a92d4719022a69fde49af957fd21716bce7bcabb1f7acefd7a39eb0127f442\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdb77139e0ed80197ee132c0d7bf4a94834103ba4e3f08db44419f14df5522f9\",\"dweb:/ipfs/QmXHXjaKBifMCuetXojcVjNVLyVHSnfjvwzHBqGL6cXeEc\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol\":{\"keccak256\":\"0xc6b2e51a60e61ad332aa023a7228a67647fad18fd55358f73a3f86f09ec4ef3e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://82c4bb28284b68f05c0364a405cdfe46d62b0e91cc61c2208b47401d7a577528\",\"dweb:/ipfs/QmYGkdmLoLA86gzyYnowMgj6qwhzmBzDnz4nQWUs7U669A\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]},\"contracts/admin/ChildChainGaugeTokenAdder.sol\":{\"keccak256\":\"0xaa51fd3b2a7d740b471204464a6bf669c018f229dc4b4f5b2ed845b1bf8fd967\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1798f5028b13eb1880ff95886309a4f1fa9db9924faa5b0d8c2264daa0a1129b\",\"dweb:/ipfs/QmNVAcLQb7mnjPfqJxWtAdx4C7XNTGeTksoB8jBFGiyg3B\"]}},\"version\":1}" + } + }, + "contracts/admin/DistributionScheduler.sol": { + "DistributionScheduler": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IRewardTokenDistributor", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getPendingRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRewardTokenDistributor", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getPendingRewardsAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRewardTokenDistributor", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getRewardNode", + "outputs": [ + { + "components": [ + { + "internalType": "uint224", + "name": "amount", + "type": "uint224" + }, + { + "internalType": "uint32", + "name": "nextTimestamp", + "type": "uint32" + } + ], + "internalType": "struct DistributionScheduler.RewardNode", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRewardTokenDistributor", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + } + ], + "name": "scheduleDistribution", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRewardTokenDistributor", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "startDistributionForToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRewardTokenDistributor", + "name": "gauge", + "type": "address" + } + ], + "name": "startDistributions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5061138e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100715760003560e01c8063974e98a611610050578063974e98a6146100d4578063d85b7a61146100e7578063e2962564146100fa57610071565b806289fac3146100765780637a27db571461008b57806380723ab3146100b4575b600080fd5b610089610084366004610e65565b61010d565b005b61009e610099366004610e81565b6102c2565b6040516100ab919061132a565b60405180910390f35b6100c76100c2366004610eb9565b6102d6565b6040516100ab91906112ef565b6100896100e2366004610ef9565b610367565b6100896100f5366004610e81565b61064e565b61009e610108366004610eb9565b61080a565b60005b60088110156102be576040517f54c49fe900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906354c49fe99061016e90859060040161132a565b60206040518083038186803b15801561018657600080fd5b505afa15801561019a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101be9190610e49565b905073ffffffffffffffffffffffffffffffffffffffff81166101e157506102be565b6040517f48e9c65e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8516906348e9c65e9061023690859060040161108f565b60c06040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102869190610f3e565b60200151905073ffffffffffffffffffffffffffffffffffffffff81163014156102b4576102b4848361064e565b5050600101610110565b5050565b60006102cf83834261080a565b9392505050565b6102de610e12565b6000806102eb8686610841565b81526020808201929092526040908101600090812063ffffffff958616825283528190208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811682527c01000000000000000000000000000000000000000000000000000000009004909316908301525092915050565b600082116103aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a1906111a1565b60405180910390fd5b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115610400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a19061116a565b63ffffffff81111561043e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a1906111fe565b6040517f48e9c65e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906348e9c65e9061049390879060040161108f565b60c06040518083038186803b1580156104ab57600080fd5b505afa1580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190610f3e565b60200151905073ffffffffffffffffffffffffffffffffffffffff8116610536576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a1906110b0565b73ffffffffffffffffffffffffffffffffffffffff81163014610585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a190611292565b428210156105bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a190611235565b6105c882610874565b8214610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a19061110d565b61062273ffffffffffffffffffffffffffffffffffffffff8516333086610880565b6106476000806106328888610841565b81526020019081526020016000208385610929565b5050505050565b600080600061065d8585610841565b8152602001908152602001600020905060008061067a8342610c37565b6000808052602086905260409081902080547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff861602179055517f095ea7b3000000000000000000000000000000000000000000000000000000008152919350915073ffffffffffffffffffffffffffffffffffffffff85169063095ea7b39061072a9088908590600401611069565b602060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190610e29565b506040517f93f7aa6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616906393f7aa67906107d19087908590600401611069565b600060405180830381600087803b1580156107eb57600080fd5b505af11580156107ff573d6000803e3d6000fd5b505050505050505050565b60008060008061081a8787610841565b8152602001908152602001600020905060006108368285610c37565b979650505050505050565b60008282604051602001610856929190610ffe565b60405160208183030381529060405280519060200120905092915050565b62093a80908190040290565b610923846323b872dd60e01b8585856040516024016108a193929190611038565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610cfa565b50505050565b6000808052602084905260408120547c0100000000000000000000000000000000000000000000000000000000900463ffffffff165b8063ffffffff168463ffffffff1611801561097f575063ffffffff811615155b156109c55763ffffffff8082166000908152602087905260409020549192507c01000000000000000000000000000000000000000000000000000000009091041661095f565b63ffffffff8116610a8f5763ffffffff8083166000908152602087815260408083208054858a167c01000000000000000000000000000000000000000000000000000000008181027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff93841617909355835180850185528a83168152808601878152918752948c905292909420925183549251909516029383167fffffffff000000000000000000000000000000000000000000000000000000009190911617909116919091179055610647565b8363ffffffff168163ffffffff161415610b7c5763ffffffff81166000908152602086905260409020547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081168185160190811115610b17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a19061116a565b63ffffffff8216600090815260208790526040902080547fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216919091179055610647565b6040805180820182527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff948516815263ffffffff92831660208083019182529684166000818152989097528288209151825491517fffffffff000000000000000000000000000000000000000000000000000000009092169087161786167c0100000000000000000000000000000000000000000000000000000000918516820217909155929091168552909320805490911692909102919091179055565b60008080526020839052604081205481907c0100000000000000000000000000000000000000000000000000000000900463ffffffff16815b8163ffffffff168510158015610c8b575063ffffffff821615155b15610cef5763ffffffff9182166000908152602087905260409020547c01000000000000000000000000000000000000000000000000000000008104909216917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1601610c70565b909590945092505050565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610d239190610fc5565b6000604051808303816000865af19150503d8060008114610d60576040519150601f19603f3d011682016040523d82523d6000602084013e610d65565b606091505b50915091506000821415610d7d573d6000803e3d6000fd5b610923815160001480610d9f575081806020019051810190610d9f9190610e29565b6101a2816102be577f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808304818104828106603090810160101b848706949093060160081b92909201016642414c230000300160c81b6044526102be91606490fd5b604080518082019091526000808252602082015290565b600060208284031215610e3a578081fd5b815180151581146102cf578182fd5b600060208284031215610e5a578081fd5b81516102cf81611333565b600060208284031215610e76578081fd5b81356102cf81611333565b60008060408385031215610e93578081fd5b8235610e9e81611333565b91506020830135610eae81611333565b809150509250929050565b600080600060608486031215610ecd578081fd5b8335610ed881611333565b92506020840135610ee881611333565b929592945050506040919091013590565b60008060008060808587031215610f0e578081fd5b8435610f1981611333565b93506020850135610f2981611333565b93969395505050506040820135916060013590565b600060c08284031215610f4f578081fd5b60405160c0810181811067ffffffffffffffff82111715610f6e578283fd5b6040528251610f7c81611333565b81526020830151610f8c81611333565b8060208301525060408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b60008251815b81811015610fe55760208186018101518583015201610fcb565b81811115610ff35782828501525b509190910192915050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811682529190921b16601482015260280190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082526024908201527f52657761726420746f6b656e20646f6573206e6f74206578697374206f6e206760408201527f6175676500000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f446973747269627574696f6e206d75737420737461727420617420746865206260408201527f6567696e6e696e67206f6620746865207765656b000000000000000000000000606082015260800190565b60208082526016908201527f52657761726420616d6f756e74206f766572666c6f7700000000000000000000604082015260600190565b60208082526026908201527f4d7573742070726f76696465206e6f6e2d7a65726f206e756d626572206f662060408201527f746f6b656e730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f5265776172642074696d657374616d70206f766572666c6f7700000000000000604082015260600190565b60208082526031908201527f446973747269627574696f6e2063616e206f6e6c79206265207363686564756c60408201527f656420666f722074686520667574757265000000000000000000000000000000606082015260800190565b60208082526037908201527f446973747269627574696f6e5363686564756c6572206973206e6f742072657760408201527f61726420746f6b656e2773206469737472696275746f72000000000000000000606082015260800190565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461135557600080fd5b5056fea26469706673582212201744a54556084a7258f77bcd9ada7368f900a2697abbdd2b173a7831b9fa23d264736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x138E 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 0x71 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x974E98A6 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x974E98A6 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0xD85B7A61 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xE2962564 EQ PUSH2 0xFA JUMPI PUSH2 0x71 JUMP JUMPDEST DUP1 PUSH3 0x89FAC3 EQ PUSH2 0x76 JUMPI DUP1 PUSH4 0x7A27DB57 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x80723AB3 EQ PUSH2 0xB4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x89 PUSH2 0x84 CALLDATASIZE PUSH1 0x4 PUSH2 0xE65 JUMP JUMPDEST PUSH2 0x10D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0xE81 JUMP JUMPDEST PUSH2 0x2C2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAB SWAP2 SWAP1 PUSH2 0x132A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC7 PUSH2 0xC2 CALLDATASIZE PUSH1 0x4 PUSH2 0xEB9 JUMP JUMPDEST PUSH2 0x2D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAB SWAP2 SWAP1 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x89 PUSH2 0xE2 CALLDATASIZE PUSH1 0x4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0x367 JUMP JUMPDEST PUSH2 0x89 PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0xE81 JUMP JUMPDEST PUSH2 0x64E JUMP JUMPDEST PUSH2 0x9E PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0xEB9 JUMP JUMPDEST PUSH2 0x80A JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0x2BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x54C49FE900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x54C49FE9 SWAP1 PUSH2 0x16E SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x132A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x1BE SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1E1 JUMPI POP PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48E9C65E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0x48E9C65E SWAP1 PUSH2 0x236 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x108F JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x286 SWAP2 SWAP1 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ADDRESS EQ ISZERO PUSH2 0x2B4 JUMPI PUSH2 0x2B4 DUP5 DUP4 PUSH2 0x64E JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x110 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF DUP4 DUP4 TIMESTAMP PUSH2 0x80A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2DE PUSH2 0xE12 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2EB DUP7 DUP7 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 PUSH4 0xFFFFFFFF SWAP6 DUP7 AND DUP3 MSTORE DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP3 MSTORE PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP1 SWAP4 AND SWAP1 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x3AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x11A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x400 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x116A JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 GT ISZERO PUSH2 0x43E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x11FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48E9C65E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH4 0x48E9C65E SWAP1 PUSH2 0x493 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x108F JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x4E3 SWAP2 SWAP1 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x10B0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ADDRESS EQ PUSH2 0x585 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x1292 JUMP JUMPDEST TIMESTAMP DUP3 LT ISZERO PUSH2 0x5BF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x1235 JUMP JUMPDEST PUSH2 0x5C8 DUP3 PUSH2 0x874 JUMP JUMPDEST DUP3 EQ PUSH2 0x600 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x110D JUMP JUMPDEST PUSH2 0x622 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND CALLER ADDRESS DUP7 PUSH2 0x880 JUMP JUMPDEST PUSH2 0x647 PUSH1 0x0 DUP1 PUSH2 0x632 DUP9 DUP9 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP4 DUP6 PUSH2 0x929 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x65D DUP6 DUP6 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x67A DUP4 TIMESTAMP PUSH2 0xC37 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH4 0xFFFFFFFF DUP7 AND MUL OR SWAP1 SSTORE MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP4 POP SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH2 0x72A SWAP1 DUP9 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x758 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x77C SWAP2 SWAP1 PUSH2 0xE29 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x93F7AA6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH4 0x93F7AA67 SWAP1 PUSH2 0x7D1 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x81A DUP8 DUP8 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x836 DUP3 DUP6 PUSH2 0xC37 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x856 SWAP3 SWAP2 SWAP1 PUSH2 0xFFE 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 PUSH3 0x93A80 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH2 0x923 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x8A1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1038 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0xCFA JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST DUP1 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x97F JUMPI POP PUSH4 0xFFFFFFFF DUP2 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x9C5 JUMPI PUSH4 0xFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 DIV AND PUSH2 0x95F JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0xA8F JUMPI PUSH4 0xFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP6 DUP11 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 DUP2 DUP2 MUL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND OR SWAP1 SWAP4 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE DUP11 DUP4 AND DUP2 MSTORE DUP1 DUP7 ADD DUP8 DUP2 MSTORE SWAP2 DUP8 MSTORE SWAP5 DUP13 SWAP1 MSTORE SWAP3 SWAP1 SWAP5 KECCAK256 SWAP3 MLOAD DUP4 SLOAD SWAP3 MLOAD SWAP1 SWAP6 AND MUL SWAP4 DUP4 AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 SWAP2 AND OR SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x647 JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND DUP2 PUSH4 0xFFFFFFFF AND EQ ISZERO PUSH2 0xB7C JUMPI PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP2 DUP6 AND ADD SWAP1 DUP2 GT ISZERO PUSH2 0xB17 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x116A JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x647 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE SWAP7 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE SWAP9 SWAP1 SWAP8 MSTORE DUP3 DUP9 KECCAK256 SWAP2 MLOAD DUP3 SLOAD SWAP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP1 DUP8 AND OR DUP7 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP2 DUP6 AND DUP3 MUL OR SWAP1 SWAP2 SSTORE SWAP3 SWAP1 SWAP2 AND DUP6 MSTORE SWAP1 SWAP4 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMPDEST DUP2 PUSH4 0xFFFFFFFF AND DUP6 LT ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI POP PUSH4 0xFFFFFFFF DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xCEF JUMPI PUSH4 0xFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 DUP2 DIV SWAP1 SWAP3 AND SWAP2 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADD PUSH2 0xC70 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xD23 SWAP2 SWAP1 PUSH2 0xFC5 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 0xD60 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 0xD65 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xD7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x923 DUP2 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0xD9F JUMPI POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xD9F SWAP2 SWAP1 PUSH2 0xE29 JUMP JUMPDEST PUSH2 0x1A2 DUP2 PUSH2 0x2BE JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP4 DIV DUP2 DUP2 DIV DUP3 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x10 SHL DUP5 DUP8 MOD SWAP5 SWAP1 SWAP4 MOD ADD PUSH1 0x8 SHL SWAP3 SWAP1 SWAP3 ADD ADD PUSH7 0x42414C23000030 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH2 0x2BE SWAP2 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE3A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2CF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE5A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2CF DUP2 PUSH2 0x1333 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE76 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2CF DUP2 PUSH2 0x1333 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE93 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xE9E DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xEAE DUP2 PUSH2 0x1333 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 0xECD JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xED8 DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xEE8 DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xF0E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xF19 DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0xF29 DUP2 PUSH2 0x1333 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 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF4F JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xF6E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP3 MLOAD PUSH2 0xF7C DUP2 PUSH2 0x1333 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0xF8C DUP2 PUSH2 0x1333 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFE5 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0xFCB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xFF3 JUMPI DUP3 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND DUP3 MSTORE SWAP2 SWAP1 SWAP3 SHL AND PUSH1 0x14 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x52657761726420746F6B656E20646F6573206E6F74206578697374206F6E2067 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6175676500000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x446973747269627574696F6E206D757374207374617274206174207468652062 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6567696E6E696E67206F6620746865207765656B000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x52657761726420616D6F756E74206F766572666C6F7700000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D7573742070726F76696465206E6F6E2D7A65726F206E756D626572206F6620 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746F6B656E730000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x5265776172642074696D657374616D70206F766572666C6F7700000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x446973747269627574696F6E2063616E206F6E6C79206265207363686564756C PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x656420666F722074686520667574757265000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x37 SWAP1 DUP3 ADD MSTORE PUSH32 0x446973747269627574696F6E5363686564756C6572206973206E6F7420726577 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61726420746F6B656E2773206469737472696275746F72000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR DIFFICULTY 0xA5 GASLIMIT JUMP ADDMOD 0x4A PUSH19 0x58F77BCD9ADA7368F900A2697ABBDD2B173A78 BALANCE 0xB9 STATICCALL 0x23 0xD2 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1205:9561:53:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100715760003560e01c8063974e98a611610050578063974e98a6146100d4578063d85b7a61146100e7578063e2962564146100fa57610071565b806289fac3146100765780637a27db571461008b57806380723ab3146100b4575b600080fd5b610089610084366004610e65565b61010d565b005b61009e610099366004610e81565b6102c2565b6040516100ab919061132a565b60405180910390f35b6100c76100c2366004610eb9565b6102d6565b6040516100ab91906112ef565b6100896100e2366004610ef9565b610367565b6100896100f5366004610e81565b61064e565b61009e610108366004610eb9565b61080a565b60005b60088110156102be576040517f54c49fe900000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906354c49fe99061016e90859060040161132a565b60206040518083038186803b15801561018657600080fd5b505afa15801561019a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101be9190610e49565b905073ffffffffffffffffffffffffffffffffffffffff81166101e157506102be565b6040517f48e9c65e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8516906348e9c65e9061023690859060040161108f565b60c06040518083038186803b15801561024e57600080fd5b505afa158015610262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102869190610f3e565b60200151905073ffffffffffffffffffffffffffffffffffffffff81163014156102b4576102b4848361064e565b5050600101610110565b5050565b60006102cf83834261080a565b9392505050565b6102de610e12565b6000806102eb8686610841565b81526020808201929092526040908101600090812063ffffffff958616825283528190208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811682527c01000000000000000000000000000000000000000000000000000000009004909316908301525092915050565b600082116103aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a1906111a1565b60405180910390fd5b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115610400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a19061116a565b63ffffffff81111561043e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a1906111fe565b6040517f48e9c65e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906348e9c65e9061049390879060040161108f565b60c06040518083038186803b1580156104ab57600080fd5b505afa1580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190610f3e565b60200151905073ffffffffffffffffffffffffffffffffffffffff8116610536576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a1906110b0565b73ffffffffffffffffffffffffffffffffffffffff81163014610585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a190611292565b428210156105bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a190611235565b6105c882610874565b8214610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a19061110d565b61062273ffffffffffffffffffffffffffffffffffffffff8516333086610880565b6106476000806106328888610841565b81526020019081526020016000208385610929565b5050505050565b600080600061065d8585610841565b8152602001908152602001600020905060008061067a8342610c37565b6000808052602086905260409081902080547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff861602179055517f095ea7b3000000000000000000000000000000000000000000000000000000008152919350915073ffffffffffffffffffffffffffffffffffffffff85169063095ea7b39061072a9088908590600401611069565b602060405180830381600087803b15801561074457600080fd5b505af1158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190610e29565b506040517f93f7aa6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616906393f7aa67906107d19087908590600401611069565b600060405180830381600087803b1580156107eb57600080fd5b505af11580156107ff573d6000803e3d6000fd5b505050505050505050565b60008060008061081a8787610841565b8152602001908152602001600020905060006108368285610c37565b979650505050505050565b60008282604051602001610856929190610ffe565b60405160208183030381529060405280519060200120905092915050565b62093a80908190040290565b610923846323b872dd60e01b8585856040516024016108a193929190611038565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610cfa565b50505050565b6000808052602084905260408120547c0100000000000000000000000000000000000000000000000000000000900463ffffffff165b8063ffffffff168463ffffffff1611801561097f575063ffffffff811615155b156109c55763ffffffff8082166000908152602087905260409020549192507c01000000000000000000000000000000000000000000000000000000009091041661095f565b63ffffffff8116610a8f5763ffffffff8083166000908152602087815260408083208054858a167c01000000000000000000000000000000000000000000000000000000008181027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff93841617909355835180850185528a83168152808601878152918752948c905292909420925183549251909516029383167fffffffff000000000000000000000000000000000000000000000000000000009190911617909116919091179055610647565b8363ffffffff168163ffffffff161415610b7c5763ffffffff81166000908152602086905260409020547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081168185160190811115610b17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a19061116a565b63ffffffff8216600090815260208790526040902080547fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216919091179055610647565b6040805180820182527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff948516815263ffffffff92831660208083019182529684166000818152989097528288209151825491517fffffffff000000000000000000000000000000000000000000000000000000009092169087161786167c0100000000000000000000000000000000000000000000000000000000918516820217909155929091168552909320805490911692909102919091179055565b60008080526020839052604081205481907c0100000000000000000000000000000000000000000000000000000000900463ffffffff16815b8163ffffffff168510158015610c8b575063ffffffff821615155b15610cef5763ffffffff9182166000908152602087905260409020547c01000000000000000000000000000000000000000000000000000000008104909216917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1601610c70565b909590945092505050565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610d239190610fc5565b6000604051808303816000865af19150503d8060008114610d60576040519150601f19603f3d011682016040523d82523d6000602084013e610d65565b606091505b50915091506000821415610d7d573d6000803e3d6000fd5b610923815160001480610d9f575081806020019051810190610d9f9190610e29565b6101a2816102be577f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808304818104828106603090810160101b848706949093060160081b92909201016642414c230000300160c81b6044526102be91606490fd5b604080518082019091526000808252602082015290565b600060208284031215610e3a578081fd5b815180151581146102cf578182fd5b600060208284031215610e5a578081fd5b81516102cf81611333565b600060208284031215610e76578081fd5b81356102cf81611333565b60008060408385031215610e93578081fd5b8235610e9e81611333565b91506020830135610eae81611333565b809150509250929050565b600080600060608486031215610ecd578081fd5b8335610ed881611333565b92506020840135610ee881611333565b929592945050506040919091013590565b60008060008060808587031215610f0e578081fd5b8435610f1981611333565b93506020850135610f2981611333565b93969395505050506040820135916060013590565b600060c08284031215610f4f578081fd5b60405160c0810181811067ffffffffffffffff82111715610f6e578283fd5b6040528251610f7c81611333565b81526020830151610f8c81611333565b8060208301525060408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b60008251815b81811015610fe55760208186018101518583015201610fcb565b81811115610ff35782828501525b509190910192915050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811682529190921b16601482015260280190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082526024908201527f52657761726420746f6b656e20646f6573206e6f74206578697374206f6e206760408201527f6175676500000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f446973747269627574696f6e206d75737420737461727420617420746865206260408201527f6567696e6e696e67206f6620746865207765656b000000000000000000000000606082015260800190565b60208082526016908201527f52657761726420616d6f756e74206f766572666c6f7700000000000000000000604082015260600190565b60208082526026908201527f4d7573742070726f76696465206e6f6e2d7a65726f206e756d626572206f662060408201527f746f6b656e730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f5265776172642074696d657374616d70206f766572666c6f7700000000000000604082015260600190565b60208082526031908201527f446973747269627574696f6e2063616e206f6e6c79206265207363686564756c60408201527f656420666f722074686520667574757265000000000000000000000000000000606082015260800190565b60208082526037908201527f446973747269627574696f6e5363686564756c6572206973206e6f742072657760408201527f61726420746f6b656e2773206469737472696275746f72000000000000000000606082015260800190565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461135557600080fd5b5056fea26469706673582212201744a54556084a7258f77bcd9ada7368f900a2697abbdd2b173a7831b9fa23d264736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x71 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x974E98A6 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x974E98A6 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0xD85B7A61 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xE2962564 EQ PUSH2 0xFA JUMPI PUSH2 0x71 JUMP JUMPDEST DUP1 PUSH3 0x89FAC3 EQ PUSH2 0x76 JUMPI DUP1 PUSH4 0x7A27DB57 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0x80723AB3 EQ PUSH2 0xB4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x89 PUSH2 0x84 CALLDATASIZE PUSH1 0x4 PUSH2 0xE65 JUMP JUMPDEST PUSH2 0x10D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9E PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0xE81 JUMP JUMPDEST PUSH2 0x2C2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAB SWAP2 SWAP1 PUSH2 0x132A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC7 PUSH2 0xC2 CALLDATASIZE PUSH1 0x4 PUSH2 0xEB9 JUMP JUMPDEST PUSH2 0x2D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAB SWAP2 SWAP1 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x89 PUSH2 0xE2 CALLDATASIZE PUSH1 0x4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0x367 JUMP JUMPDEST PUSH2 0x89 PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0xE81 JUMP JUMPDEST PUSH2 0x64E JUMP JUMPDEST PUSH2 0x9E PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0xEB9 JUMP JUMPDEST PUSH2 0x80A JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x8 DUP2 LT ISZERO PUSH2 0x2BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x54C49FE900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x54C49FE9 SWAP1 PUSH2 0x16E SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x132A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x1BE SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1E1 JUMPI POP PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48E9C65E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0x48E9C65E SWAP1 PUSH2 0x236 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x108F JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x262 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x286 SWAP2 SWAP1 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ADDRESS EQ ISZERO PUSH2 0x2B4 JUMPI PUSH2 0x2B4 DUP5 DUP4 PUSH2 0x64E JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x110 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF DUP4 DUP4 TIMESTAMP PUSH2 0x80A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2DE PUSH2 0xE12 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2EB DUP7 DUP7 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 PUSH4 0xFFFFFFFF SWAP6 DUP7 AND DUP3 MSTORE DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP3 MSTORE PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV SWAP1 SWAP4 AND SWAP1 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 GT PUSH2 0x3AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x11A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x400 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x116A JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 GT ISZERO PUSH2 0x43E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x11FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48E9C65E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH4 0x48E9C65E SWAP1 PUSH2 0x493 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x108F JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x4E3 SWAP2 SWAP1 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x10B0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ADDRESS EQ PUSH2 0x585 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x1292 JUMP JUMPDEST TIMESTAMP DUP3 LT ISZERO PUSH2 0x5BF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x1235 JUMP JUMPDEST PUSH2 0x5C8 DUP3 PUSH2 0x874 JUMP JUMPDEST DUP3 EQ PUSH2 0x600 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x110D JUMP JUMPDEST PUSH2 0x622 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND CALLER ADDRESS DUP7 PUSH2 0x880 JUMP JUMPDEST PUSH2 0x647 PUSH1 0x0 DUP1 PUSH2 0x632 DUP9 DUP9 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP4 DUP6 PUSH2 0x929 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x65D DUP6 DUP6 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x67A DUP4 TIMESTAMP PUSH2 0xC37 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH4 0xFFFFFFFF DUP7 AND MUL OR SWAP1 SSTORE MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP4 POP SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH2 0x72A SWAP1 DUP9 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x758 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x77C SWAP2 SWAP1 PUSH2 0xE29 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x93F7AA6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH4 0x93F7AA67 SWAP1 PUSH2 0x7D1 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x81A DUP8 DUP8 PUSH2 0x841 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x836 DUP3 DUP6 PUSH2 0xC37 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x856 SWAP3 SWAP2 SWAP1 PUSH2 0xFFE 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 PUSH3 0x93A80 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH2 0x923 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x8A1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1038 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0xCFA JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST DUP1 PUSH4 0xFFFFFFFF AND DUP5 PUSH4 0xFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x97F JUMPI POP PUSH4 0xFFFFFFFF DUP2 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x9C5 JUMPI PUSH4 0xFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 DIV AND PUSH2 0x95F JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH2 0xA8F JUMPI PUSH4 0xFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP6 DUP11 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 DUP2 DUP2 MUL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND OR SWAP1 SWAP4 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE DUP11 DUP4 AND DUP2 MSTORE DUP1 DUP7 ADD DUP8 DUP2 MSTORE SWAP2 DUP8 MSTORE SWAP5 DUP13 SWAP1 MSTORE SWAP3 SWAP1 SWAP5 KECCAK256 SWAP3 MLOAD DUP4 SLOAD SWAP3 MLOAD SWAP1 SWAP6 AND MUL SWAP4 DUP4 AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 SWAP2 AND OR SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x647 JUMP JUMPDEST DUP4 PUSH4 0xFFFFFFFF AND DUP2 PUSH4 0xFFFFFFFF AND EQ ISZERO PUSH2 0xB7C JUMPI PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP2 DUP6 AND ADD SWAP1 DUP2 GT ISZERO PUSH2 0xB17 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A1 SWAP1 PUSH2 0x116A JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x647 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE SWAP7 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE SWAP9 SWAP1 SWAP8 MSTORE DUP3 DUP9 KECCAK256 SWAP2 MLOAD DUP3 SLOAD SWAP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP1 DUP8 AND OR DUP7 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP2 DUP6 AND DUP3 MUL OR SWAP1 SWAP2 SSTORE SWAP3 SWAP1 SWAP2 AND DUP6 MSTORE SWAP1 SWAP4 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMPDEST DUP2 PUSH4 0xFFFFFFFF AND DUP6 LT ISZERO DUP1 ISZERO PUSH2 0xC8B JUMPI POP PUSH4 0xFFFFFFFF DUP3 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xCEF JUMPI PUSH4 0xFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 DUP2 DIV SWAP1 SWAP3 AND SWAP2 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ADD PUSH2 0xC70 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xD23 SWAP2 SWAP1 PUSH2 0xFC5 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 0xD60 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 0xD65 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xD7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x923 DUP2 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0xD9F JUMPI POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xD9F SWAP2 SWAP1 PUSH2 0xE29 JUMP JUMPDEST PUSH2 0x1A2 DUP2 PUSH2 0x2BE JUMPI PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP4 DIV DUP2 DUP2 DIV DUP3 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x10 SHL DUP5 DUP8 MOD SWAP5 SWAP1 SWAP4 MOD ADD PUSH1 0x8 SHL SWAP3 SWAP1 SWAP3 ADD ADD PUSH7 0x42414C23000030 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH2 0x2BE SWAP2 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE3A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2CF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE5A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2CF DUP2 PUSH2 0x1333 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE76 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2CF DUP2 PUSH2 0x1333 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE93 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xE9E DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xEAE DUP2 PUSH2 0x1333 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 0xECD JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xED8 DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xEE8 DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xF0E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0xF19 DUP2 PUSH2 0x1333 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0xF29 DUP2 PUSH2 0x1333 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 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF4F JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xF6E JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP3 MLOAD PUSH2 0xF7C DUP2 PUSH2 0x1333 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0xF8C DUP2 PUSH2 0x1333 JUMP JUMPDEST DUP1 PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFE5 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0xFCB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xFF3 JUMPI DUP3 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND DUP3 MSTORE SWAP2 SWAP1 SWAP3 SHL AND PUSH1 0x14 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x52657761726420746F6B656E20646F6573206E6F74206578697374206F6E2067 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6175676500000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x34 SWAP1 DUP3 ADD MSTORE PUSH32 0x446973747269627574696F6E206D757374207374617274206174207468652062 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x6567696E6E696E67206F6620746865207765656B000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x52657761726420616D6F756E74206F766572666C6F7700000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x26 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D7573742070726F76696465206E6F6E2D7A65726F206E756D626572206F6620 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746F6B656E730000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x19 SWAP1 DUP3 ADD MSTORE PUSH32 0x5265776172642074696D657374616D70206F766572666C6F7700000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x31 SWAP1 DUP3 ADD MSTORE PUSH32 0x446973747269627574696F6E2063616E206F6E6C79206265207363686564756C PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x656420666F722074686520667574757265000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x37 SWAP1 DUP3 ADD MSTORE PUSH32 0x446973747269627574696F6E5363686564756C6572206973206E6F7420726577 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x61726420746F6B656E2773206469737472696275746F72000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR DIFFICULTY 0xA5 GASLIMIT JUMP ADDMOD 0x4A PUSH19 0x58F77BCD9ADA7368F900A2697ABBDD2B173A78 BALANCE 0xB9 STATICCALL 0x23 0xD2 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1205:9561:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5998:531;;;;;;:::i;:::-;;:::i;:::-;;2906:176;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2362:248;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4502:1306::-;;;;;;:::i;:::-;;:::i;6816:637::-;;;;;;:::i;:::-;;:::i;3444:365::-;;;;;;:::i;:::-;;:::i;5998:531::-;6081:9;6076:447;1315:1;6096;:16;6076:447;;;6148:22;;;;;6133:12;;6148:19;;;;;;:22;;6168:1;;6148:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6133:37;-1:-1:-1;6188:18:53;;;6184:29;;6208:5;;;6184:29;6351:24;;;;;6323:25;;6351:17;;;;;;:24;;6369:5;;6351:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;;-1:-1:-1;6405:34:53;;;6434:4;6405:34;6401:112;;;6459:39;6485:5;6492;6459:25;:39::i;:::-;-1:-1:-1;;6114:3:53;;6076:447;;;;5998:531;:::o;2906:176::-;2999:7;3025:50;3045:5;3052;3059:15;3025:19;:50::i;:::-;3018:57;2906:176;-1:-1:-1;;;2906:176:53:o;2362:248::-;2502:17;;:::i;:::-;2538:13;:46;2552:31;2570:5;2577;2552:17;:31::i;:::-;2538:46;;;;;;;;;;;;;;-1:-1:-1;2538:46:53;;;:65;;;;;;;;;;;2531:72;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2531:72:53;2362:248;-1:-1:-1;;2362:248:53:o;4502:1306::-;4686:1;4677:6;:10;4669:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;4827:17;4817:27;;;4809:62;;;;;;;;;;;;:::i;:::-;4902:16;4889:29;;;4881:67;;;;;;;;;;;;:::i;:::-;5078:24;;;;;5050:25;;5078:17;;;;;;:24;;5096:5;;5078:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;;-1:-1:-1;5132:31:53;;;5124:80;;;;;;;;;;;;:::i;:::-;5222:34;;;5251:4;5222:34;5214:102;;;;;;;;;;;;:::i;:::-;5438:15;5425:9;:28;;5417:90;;;;;;;;;;;;:::i;:::-;5538:30;5558:9;5538:19;:30::i;:::-;5525:9;:43;5517:108;;;;;;;;;;;;:::i;:::-;5636:57;:22;;;5659:10;5679:4;5686:6;5636:22;:57::i;:::-;5704:97;5718:13;:46;5732:31;5750:5;5757;5732:17;:31::i;:::-;5718:46;;;;;;;;;;;5773:9;5793:6;5704:13;:97::i;:::-;4502:1306;;;;;:::o;6816:637::-;6913:49;6965:13;:46;6979:31;6997:5;7004;6979:17;:31::i;:::-;6965:46;;;;;;;;;;;6913:98;;7023:30;7055:20;7079:48;7098:11;7111:15;7079:18;:48::i;:::-;7277:18;;;;;;;;;;;;;:58;;;;;:18;:58;;;;;;7346:43;;;;7277:58;;-1:-1:-1;7022:105:53;-1:-1:-1;7346:13:53;;;;;;:43;;7368:5;;7022:105;;7346:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7399:47:53;;;;;:26;;;;;;:47;;7426:5;;7433:12;;7399:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6816:637;;;;;:::o;3444:365::-;3588:7;3607:49;3659:13;:46;3673:31;3691:5;3698;3673:17;:31::i;:::-;3659:46;;;;;;;;;;;3607:98;;3719:14;3737:42;3756:11;3769:9;3737:18;:42::i;:::-;3716:63;3444:365;-1:-1:-1;;;;;;;3444:365:53:o;7486:181::-;7587:7;7640:5;7647:11;7623:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7613:47;;;;;;7606:54;;7486:181;;;;:::o;10630:134::-;10739:7;10727:19;;;;10726:31;;10630:134::o;1220:250:45:-;1358:105;1386:5;1417:27;;;1446:4;1452:2;1456:5;1394:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1358:19;:105::i;:::-;1220:250;;;;:::o;8694:1811:53:-;8977:21;9037:27;;;;;;;;;;:41;;;;:27;:41;9235:184;9260:11;9242:29;;:15;:29;;;:53;;;;-1:-1:-1;9275:20:53;;;;;9242:53;9235:184;;;9367:27;;;;;;;;;;;;;;;:41;9328:11;;-1:-1:-1;9367:41:53;;;;;9235:184;;;9433:20;;;9429:1070;;9552:27;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;9656:25;;;;;;;;;;;;;;;;;;9625:28;;;;;;;;;;;:56;;;;;;;;;;;;;9552:59;9625:56;;;;;;;;;;;;;;9429:1070;;;9717:15;9702:30;;:11;:30;;;9698:801;;;9919:24;;;9888:20;9919:24;;;;;;;;;;:31;9911:49;9919:31;;;9911:49;;;;;9982:33;;;9974:68;;;;;;;;;;;;:::i;:::-;10056:24;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;9698:801;;;10384:31;;;;;;;;;;;;;;;;;;;;;;;;;10353:28;;;-1:-1:-1;10353:28:53;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;10429:27;;;;;;;;;:59;;;;;;;;;;;;;;;8694:1811::o;7966:616::-;8111:6;8166:18;;;;;;;;;;:32;8111:6;;8166:32;;;:18;:32;8111:6;8329:205;8349:14;8336:27;;:9;:27;;:54;;;;-1:-1:-1;8367:23:53;;;;;8336:54;8329:205;;;8416:27;;;;;;;;;;;;;;;:34;8482:41;;;;;;;8416:34;;8406:44;8329:205;;;8552:14;;;;-1:-1:-1;7966:616:53;-1:-1:-1;;;7966:616:53:o;1810:914:45:-;2112:12;2126:23;2153:5;:10;;2164:4;2153:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2111:58;;;;2363:1;2354:7;2351:14;2348:2;;;2405:16;2402:1;2399;2384:38;2449:16;2446:1;2439:27;2348:2;2620:97;2629:10;:17;2650:1;2629:22;:56;;;;2666:10;2655:30;;;;;;;;;;;;:::i;:::-;10129:3:20;935:9;930:34;;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2210:2;2243:18;;;2336;;;2383;;;2215:4;2379:29;;;3057:2;3053:17;2195:18;;;2288;;;;2284:29;3040:1;3036:14;3025:26;;;;3021:50;2999:73;;2994:3;2990:83;4008:4;4001:26;946:18;;4234:3;;4224:14;-1:-1:-1;;;;;;;;;;;;;;;;;;;:::o;2310:257::-;;2422:2;2410:9;2401:7;2397:23;2393:32;2390:2;;;-1:-1;;2428:12;2390:2;227:6;221:13;18623:5;16503:13;16496:21;18601:5;18598:32;18588:2;;-1:-1;;18634:12;2574:293;;2704:2;2692:9;2683:7;2679:23;2675:32;2672:2;;;-1:-1;;2710:12;2672:2;547:6;541:13;559:48;601:5;559:48;:::i;2874:303::-;;3009:2;2997:9;2988:7;2984:23;2980:32;2977:2;;;-1:-1;;3015:12;2977:2;730:6;717:20;742:64;800:5;742:64;:::i;3184:458::-;;;3351:2;3339:9;3330:7;3326:23;3322:32;3319:2;;;-1:-1;;3357:12;3319:2;730:6;717:20;742:64;800:5;742:64;:::i;:::-;3409:94;-1:-1;3540:2;3594:22;;363:20;388:48;363:20;388:48;:::i;:::-;3548:78;;;;3313:329;;;;;:::o;3649:583::-;;;;3833:2;3821:9;3812:7;3808:23;3804:32;3801:2;;;-1:-1;;3839:12;3801:2;730:6;717:20;742:64;800:5;742:64;:::i;:::-;3891:94;-1:-1;4022:2;4076:22;;363:20;388:48;363:20;388:48;:::i;:::-;3795:437;;4030:78;;-1:-1;;;4145:2;4184:22;;;;2099:20;;3795:437::o;4239:709::-;;;;;4440:3;4428:9;4419:7;4415:23;4411:33;4408:2;;;-1:-1;;4447:12;4408:2;730:6;717:20;742:64;800:5;742:64;:::i;:::-;4499:94;-1:-1;4630:2;4684:22;;363:20;388:48;363:20;388:48;:::i;:::-;4402:546;;4638:78;;-1:-1;;;;4753:2;4792:22;;2099:20;;4861:2;4900:22;2099:20;;4402:546::o;4955:310::-;;5093:3;5081:9;5072:7;5068:23;5064:33;5061:2;;;-1:-1;;5100:12;5061:2;15685;15679:9;5093:3;15715:6;15711:17;15822:6;15810:10;15807:22;15786:18;15774:10;15771:34;15768:62;15765:2;;;-1:-1;;15833:12;15765:2;15685;15852:22;83:13;;101:33;83:13;101:33;:::i;:::-;1099:101;;1268:2;1333:22;;83:13;101:33;83:13;101:33;:::i;:::-;1301:60;1268:2;1287:5;1283:16;1276:86;;15685:2;1501:9;1497:22;2247:13;15685:2;1451:5;1447:16;1440:86;1587:2;1656:9;1652:22;2247:13;1587:2;1606:5;1602:16;1595:86;1749:3;1819:9;1815:22;2247:13;1749:3;1769:5;1765:16;1758:86;1909:3;1979:9;1975:22;2247:13;1909:3;1929:5;1925:16;1918:86;5152:97;;;;5055:210;;;;:::o;9903:271::-;;5552:5;15973:12;-1:-1;17914:101;17928:6;17925:1;17922:13;17914:101;;;5696:4;17995:11;;;;;17989:18;17976:11;;;17969:39;17943:10;17914:101;;;18030:6;18027:1;18024:13;18021:2;;;-1:-1;18086:6;18081:3;18077:16;18070:27;18021:2;-1:-1;5727:16;;;;;10037:137;-1:-1;;10037:137::o;10181:484::-;18386:14;18390:2;18386:14;;;;;6022:86;;18386:14;;;;;10511:2;10502:12;;6022:86;10628:12;;;10371:294::o;10672:444::-;16844:42;16833:54;;;5343:37;;16833:54;;;;11019:2;11004:18;;5343:37;11102:2;11087:18;;9747:37;;;;10855:2;10840:18;;10826:290::o;11123:333::-;16844:42;16833:54;;;;5343:37;;11442:2;11427:18;;9747:37;11278:2;11263:18;;11249:207::o;11463:252::-;16844:42;16833:54;;;;5841:65;;11605:2;11590:18;;11576:139::o;12092:416::-;12292:2;12306:47;;;6579:2;12277:18;;;16271:19;6615:34;16311:14;;;6595:55;6684:6;6670:12;;;6663:28;6710:12;;;12263:245::o;12515:416::-;12715:2;12729:47;;;6961:2;12700:18;;;16271:19;6997:34;16311:14;;;6977:55;7066:22;7052:12;;;7045:44;7108:12;;;12686:245::o;12938:416::-;13138:2;13152:47;;;7359:2;13123:18;;;16271:19;7395:24;16311:14;;;7375:45;7439:12;;;13109:245::o;13361:416::-;13561:2;13575:47;;;7690:2;13546:18;;;16271:19;7726:34;16311:14;;;7706:55;7795:8;7781:12;;;7774:30;7823:12;;;13532:245::o;13784:416::-;13984:2;13998:47;;;8074:2;13969:18;;;16271:19;8110:27;16311:14;;;8090:48;8157:12;;;13955:245::o;14207:416::-;14407:2;14421:47;;;8408:2;14392:18;;;16271:19;8444:34;16311:14;;;8424:55;8513:19;8499:12;;;8492:41;8552:12;;;14378:245::o;14630:416::-;14830:2;14844:47;;;8803:2;14815:18;;;16271:19;8839:34;16311:14;;;8819:55;8908:25;8894:12;;;8887:47;8953:12;;;14801:245::o;15053:334::-;9285:23;;16972:58;16961:70;9627:37;;9465:4;9454:16;;;9448:23;17194:10;17183:22;9523:14;;;9855:36;;;;15236:2;15221:18;;15207:180::o;15394:222::-;9747:37;;;15521:2;15506:18;;15492:124::o;18418:117::-;16844:42;18505:5;16833:54;18480:5;18477:35;18467:2;;18526:1;;18516:12;18467:2;18461:74;:::o" + }, + "methodIdentifiers": { + "getPendingRewards(address,address)": "7a27db57", + "getPendingRewardsAt(address,address,uint256)": "e2962564", + "getRewardNode(address,address,uint256)": "80723ab3", + "scheduleDistribution(address,address,uint256,uint256)": "974e98a6", + "startDistributionForToken(address,address)": "d85b7a61", + "startDistributions(address)": "0089fac3" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IRewardTokenDistributor\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPendingRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRewardTokenDistributor\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getPendingRewardsAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRewardTokenDistributor\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getRewardNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"amount\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"nextTimestamp\",\"type\":\"uint32\"}],\"internalType\":\"struct DistributionScheduler.RewardNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRewardTokenDistributor\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"scheduleDistribution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRewardTokenDistributor\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"startDistributionForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRewardTokenDistributor\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"startDistributions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Any address may send tokens to the DistributionSchedule to be distributed among gauge depositors.\",\"kind\":\"dev\",\"methods\":{\"getPendingRewards(address,address)\":{\"params\":{\"gauge\":\"- The gauge which is to distribute the reward token.\",\"token\":\"- The token which is to be distributed among gauge depositors.\"}},\"getPendingRewardsAt(address,address,uint256)\":{\"params\":{\"gauge\":\"- The gauge which is to distribute the reward token.\",\"timestamp\":\"- The future timestamp in which to query.\",\"token\":\"- The token which is to be distributed among gauge depositors.\"}},\"getRewardNode(address,address,uint256)\":{\"params\":{\"gauge\":\"- The gauge which is to distribute the reward token.\",\"timestamp\":\"- The timestamp corresponding to the beginning of the week being queried.\",\"token\":\"- The token which is to be distributed among gauge depositors.\"},\"returns\":{\"_0\":\"- the amount of `token` which is to be distributed over the week starting at `timestamp`. - the timestamp of the next scheduled distribution of `token` to `gauge`. Zero if no distribution exists.\"}},\"scheduleDistribution(address,address,uint256,uint256)\":{\"details\":\"All distributions must start at the beginning of a week in UNIX time, i.e. Thurs 00:00 UTC. This is to prevent griefing from many low value distributions having to be processed before a meaningful distribution can be processed.\",\"params\":{\"amount\":\"- The amount of tokens which to distribute.\",\"gauge\":\"- The gauge which is to distribute the reward token.\",\"startTime\":\"- The timestamp at the beginning of the week over which to distribute tokens.\",\"token\":\"- The token which is to be distributed among gauge depositors.\"}},\"startDistributionForToken(address,address)\":{\"params\":{\"gauge\":\"- The gauge which is to distribute the reward token.\",\"token\":\"- The token which is to be distributed among gauge depositors.\"}},\"startDistributions(address)\":{\"params\":{\"gauge\":\"- The gauge which is to distribute the reward token.\"}}},\"title\":\"DistributionScheduler\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPendingRewards(address,address)\":{\"notice\":\"Returns the amount of `token` which is ready to be distributed by `gauge` as of the current timestamp.\"},\"getPendingRewardsAt(address,address,uint256)\":{\"notice\":\"Returns the amount of `token` which is ready to be distributed by `gauge` as of a specified timestamp.\"},\"getRewardNode(address,address,uint256)\":{\"notice\":\"Returns information on the reward paid out to `gauge` in `token` over the week starting at `timestamp`\"},\"scheduleDistribution(address,address,uint256,uint256)\":{\"notice\":\"Schedule a distribution of tokens to gauge depositors over the span of 1 week.\"},\"startDistributionForToken(address,address)\":{\"notice\":\"Process all pending distributions for a given token for a gauge to start distributing tokens.\"},\"startDistributions(address)\":{\"notice\":\"Process all pending distributions for a gauge to start distributing the tokens.\"}},\"notice\":\"Scheduler for setting up permissionless distributions of liquidity gauge reward tokens.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/admin/DistributionScheduler.sol\":\"DistributionScheduler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":{\"keccak256\":\"0x0c992c65f6cf48ce430d14518b1c402faf11f50fc3683321ea7dfb808eb3f3a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9d182e07a81d3444297d6a751c2a68ddf05b4f1b16c962ef0fe5389f1674309\",\"dweb:/ipfs/QmQYKQ1YecKzkGGrVxjexGEoxU8BPojfJCsNKp5VgYRFtA\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\":{\"keccak256\":\"0x773d0bf95fd51f7042cf5e20d1424aae24218c358ad71676c29878f76d81e7f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86d0397ef1443257ad7a49306f3f2bdd490f4a238d4d416373031b8262d211ee\",\"dweb:/ipfs/QmUHBu6gWfnhLEjQ3FCcbha6zUVZVfPFaNJMvnz9h8Prvy\"]},\"contracts/admin/DistributionScheduler.sol\":{\"keccak256\":\"0x56701c2da215a7e9a917db8345a1bf4a4603094a21c29592dfef42daede84386\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9d8e715aa85188f1fff1abe9856bf56d8f66d7363d5dca4bde097daf5f0a7c64\",\"dweb:/ipfs/QmcDu9uFUTeS4myBzZM29c5rCLaCEjEkrMvpZWS6xBr2oP\"]}},\"version\":1}" + } + }, + "contracts/admin/GaugeAdder.sol": { + "GaugeAdder": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IGaugeController", + "name": "gaugeController", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "contract ILiquidityGaugeFactory", + "name": "gaugeFactory", + "type": "address" + } + ], + "name": "GaugeFactoryAdded", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rootGauge", + "type": "address" + } + ], + "name": "addArbitrumGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IStakingLiquidityGauge", + "name": "gauge", + "type": "address" + } + ], + "name": "addEthereumGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ILiquidityGaugeFactory", + "name": "factory", + "type": "address" + }, + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + } + ], + "name": "addGaugeFactory", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rootGauge", + "type": "address" + } + ], + "name": "addPolygonGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizerAdaptor", + "outputs": [ + { + "internalType": "contract IAuthorizerAdaptor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getFactoryForGaugeType", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + } + ], + "name": "getFactoryForGaugeTypeCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeController", + "outputs": [ + { + "internalType": "contract IGaugeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "enum IGaugeAdder.GaugeType", + "name": "gaugeType", + "type": "uint8" + } + ], + "name": "isGaugeFromValidFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60e060405234801561001057600080fd5b506040516113eb3803806113eb8339818101604052602081101561003357600080fd5b5051604080516303e1469160e61b815290516001600160a01b0383169163f851a440916004808301926020929190829003018186803b15801561007557600080fd5b505afa158015610089573d6000803e3d6000fd5b505050506040513d602081101561009f57600080fd5b5051604080516311b2515f60e31b815290516001600160a01b0390921691638d928af891600480820192602092909190829003018186803b1580156100e357600080fd5b505afa1580156100f7573d6000803e3d6000fd5b505050506040513d602081101561010d57600080fd5b5051306080526001600160601b0319606091821b811660a05260016000559082901b1660c052604080516303e1469160e61b815290516001600160a01b0383169163f851a440916004808301926020929190829003018186803b15801561017357600080fd5b505afa158015610187573d6000803e3d6000fd5b505050506040513d602081101561019d57600080fd5b5051600180546001600160a01b039092166001600160a01b03199092169190911790555060805160a05160601c60c05160601c6111e961020260003980610366528061049d528061060a5280610cde52508061098b52508061091e52506111e96000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063a8ea68751161008c578063bf2972d511610066578063bf2972d514610290578063e758d36b146102c3578063f3d8b4cf146102cb578063f87fcfa2146102eb576100df565b8063a8ea687514610205578063aaabadc514610238578063abfca00914610240576100df565b80636440e973116100bd5780636440e97314610170578063851c1bb3146101ac5780638d928af8146101fd576100df565b806352854ed7146100e457806358de9ade146101335780635e45a2731461013b575b600080fd5b61010a600480360360408110156100fa57600080fd5b5060ff813516906020013561031e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010a610364565b61016e6004803603602081101561015157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610388565b005b61016e6004803603604081101561018657600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013560ff16610600565b6101eb600480360360208110156101c257600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610918565b60408051918252519081900360200190f35b61010a610989565b61010a6004803603602081101561021b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109ad565b61010a6109d8565b61027c6004803603604081101561025657600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013560ff16610a58565b604080519115158252519081900360200190f35b61016e600480360360208110156102a657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b5f565b61010a610b75565b6101eb600480360360208110156102e157600080fd5b503560ff16610b91565b61016e6004803603602081101561030157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bc4565b600061035b826002600086600481111561033457fe5b600481111561033f57fe5b8152602001908152602001600020610bd790919063ffffffff16565b90505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b610390610bf3565b60008173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b815260040160206040518083038186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d602081101561040257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff808216600090815260036020526040902054919250161561049b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4475706c69636174652067617567650000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d602081101561052b57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff8281169116141561059e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061118d6027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff818116600090815260036020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790556105fc826002610c39565b5050565b610608610bf3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fba03a16040518163ffffffff1660e01b815260040160206040518083038186803b15801561066e57600080fd5b505afa158015610682573d6000803e3d6000fd5b505050506040513d602081101561069857600080fd5b5051600f0b8160048111156106a957fe5b1061071557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420676175676520747970650000000000000000000000000000604482015290519081900360640190fd5b604080517fce3cc8bd00000000000000000000000000000000000000000000000000000000815260006004820152905173ffffffffffffffffffffffffffffffffffffffff84169163ce3cc8bd916024808301926020929190829003018186803b15801561078257600080fd5b505afa158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b50511561081a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c696420666163746f727920696d706c656d656e746174696f6e0000604482015290519081900360640190fd5b60006002600083600481111561082c57fe5b600481111561083757fe5b8152602081019190915260400160002090506108538184610f54565b6108be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f466163746f727920616c72656164792061646465640000000000000000000000604482015290519081900360640190fd5b8160048111156108ca57fe5b6040805173ffffffffffffffffffffffffffffffffffffffff8616815290517f39a43f795b6ee7259df4404784d3b77b09d09d5fee8454c3d641d48a888e188d9181900360200190a2505050565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600360205260409020541690565b60006109e2610989565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2757600080fd5b505afa158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b5051905090565b60008060026000846004811115610a6b57fe5b6004811115610a7657fe5b815260200190815260200160002090506000610a9182610fdc565b905060005b81811015610b5357610aa88382610fe0565b73ffffffffffffffffffffffffffffffffffffffff1663ce3cc8bd876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b0e57600080fd5b505afa158015610b22573d6000803e3d6000fd5b505050506040513d6020811015610b3857600080fd5b505115610b4b576001935050505061035e565b600101610a96565b50600095945050505050565b610b67610bf3565b610b72816004610c39565b50565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b600061035e60026000846004811115610ba657fe5b6004811115610bb157fe5b8152602001908152602001600020610fdc565b610bcc610bf3565b610b72816003610c39565b8154600090610be9908310606461101a565b61035b8383610fe0565b6000610c226000357fffffffff0000000000000000000000000000000000000000000000000000000016610918565b9050610b72610c318233611028565b61019161101a565b610c438282610a58565b610cae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420676175676500000000000000000000000000000000000000604482015290519081900360640190fd5b60015460405173ffffffffffffffffffffffffffffffffffffffff84811660248301908152921691634036176a917f0000000000000000000000000000000000000000000000000000000000000000917f3a04f900000000000000000000000000000000000000000000000000000000009187918791604401826004811115610d3357fe5b81526040805180830381526020928301825291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000978816178152815160e08a901b909716875273ffffffffffffffffffffffffffffffffffffffff881660048801908152602488019283528351604489015283519397909650919450606490910192509080838360005b83811015610df7578181015183820152602001610ddf565b50505050905090810190601f168015610e245780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610e9f57600080fd5b8101908080516040519392919084640100000000821115610ebf57600080fd5b908301906020820185811115610ed457600080fd5b8251640100000000811182820188101715610eee57600080fd5b82525081516020918201929091019080838360005b83811015610f1b578181015183820152602001610f03565b50505050905090810190601f168015610f485780820380516001836020036101000a031916815260200191505b50604052505050505050565b6000610f6083836110f1565b610fd457508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558554908252828601909352604090209190915561035e565b50600061035e565b5490565b6000826000018281548110610ff157fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169392505050565b816105fc576105fc8161111f565b60006110326109d8565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b50519392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001919091016020526040902054151590565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe43616e6e6f742061646420676175676520666f722038302f32302042414c2d5745544820425054a2646970667358221220cc0489fa25807451283528293f10d6d02e083dc2fa8e0080bdd893343a82f5ff64736f6c63430007010033", + "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x13EB CODESIZE SUB DUP1 PUSH2 0x13EB DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x11B2515F PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x8D928AF8 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ADDRESS PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x0 SSTORE SWAP1 DUP3 SWAP1 SHL AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP 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 0x20 DUP2 LT ISZERO PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH2 0x11E9 PUSH2 0x202 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x366 MSTORE DUP1 PUSH2 0x49D MSTORE DUP1 PUSH2 0x60A MSTORE DUP1 PUSH2 0xCDE MSTORE POP DUP1 PUSH2 0x98B MSTORE POP DUP1 PUSH2 0x91E MSTORE POP PUSH2 0x11E9 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 0xDF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA8EA6875 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBF2972D5 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBF2972D5 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0xE758D36B EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0xF3D8B4CF EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0xF87FCFA2 EQ PUSH2 0x2EB JUMPI PUSH2 0xDF JUMP JUMPDEST DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0xABFCA009 EQ PUSH2 0x240 JUMPI PUSH2 0xDF JUMP JUMPDEST DUP1 PUSH4 0x6440E973 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x6440E973 EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1FD JUMPI PUSH2 0xDF JUMP JUMPDEST DUP1 PUSH4 0x52854ED7 EQ PUSH2 0xE4 JUMPI DUP1 PUSH4 0x58DE9ADE EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x5E45A273 EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x31E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x10A PUSH2 0x364 JUMP JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x388 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xFF AND PUSH2 0x600 JUMP JUMPDEST PUSH2 0x1EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x918 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x10A PUSH2 0x989 JUMP JUMPDEST PUSH2 0x10A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9AD JUMP JUMPDEST PUSH2 0x10A PUSH2 0x9D8 JUMP JUMPDEST PUSH2 0x27C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xFF AND PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB5F JUMP JUMPDEST PUSH2 0x10A PUSH2 0xB75 JUMP JUMPDEST PUSH2 0x1EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35B DUP3 PUSH1 0x2 PUSH1 0x0 DUP7 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x334 JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x33F JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0xBD7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBF3 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x82C63066 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP AND ISZERO PUSH2 0x49B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4475706C69636174652067617567650000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFC0C546A 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x515 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x59E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x118D PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 DUP5 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x5FC DUP3 PUSH1 0x2 PUSH2 0xC39 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x608 PUSH2 0xBF3 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9FBA03A1 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x682 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x698 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xF SIGNEXTEND DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x6A9 JUMPI INVALID JUMPDEST LT PUSH2 0x715 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676520747970650000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xCE3CC8BD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 PUSH4 0xCE3CC8BD SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x796 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x81A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420666163746F727920696D706C656D656E746174696F6E0000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x82C JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x837 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH2 0x853 DUP2 DUP5 PUSH2 0xF54 JUMP JUMPDEST PUSH2 0x8BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x466163746F727920616C72656164792061646465640000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x8CA JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x39A43F795B6EE7259DF4404784D3B77B09D09D5FEE8454C3D641D48A888E188D SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9E2 PUSH2 0x989 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xA6B JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xA76 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xA91 DUP3 PUSH2 0xFDC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB53 JUMPI PUSH2 0xAA8 DUP4 DUP3 PUSH2 0xFE0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCE3CC8BD DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB22 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0xB4B JUMPI PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x35E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xA96 JUMP JUMPDEST POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB67 PUSH2 0xBF3 JUMP JUMPDEST PUSH2 0xB72 DUP2 PUSH1 0x4 PUSH2 0xC39 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35E PUSH1 0x2 PUSH1 0x0 DUP5 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xBA6 JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xBB1 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0xFDC JUMP JUMPDEST PUSH2 0xBCC PUSH2 0xBF3 JUMP JUMPDEST PUSH2 0xB72 DUP2 PUSH1 0x3 PUSH2 0xC39 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xBE9 SWAP1 DUP4 LT PUSH1 0x64 PUSH2 0x101A JUMP JUMPDEST PUSH2 0x35B DUP4 DUP4 PUSH2 0xFE0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC22 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x918 JUMP JUMPDEST SWAP1 POP PUSH2 0xB72 PUSH2 0xC31 DUP3 CALLER PUSH2 0x1028 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x101A JUMP JUMPDEST PUSH2 0xC43 DUP3 DUP3 PUSH2 0xA58 JUMP JUMPDEST PUSH2 0xCAE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676500000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD SWAP1 DUP2 MSTORE SWAP3 AND SWAP2 PUSH4 0x4036176A SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x3A04F90000000000000000000000000000000000000000000000000000000000 SWAP2 DUP8 SWAP2 DUP8 SWAP2 PUSH1 0x44 ADD DUP3 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xD33 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD DUP3 MSTORE SWAP2 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP8 DUP9 AND OR DUP2 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL SWAP1 SWAP8 AND DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x4 DUP9 ADD SWAP1 DUP2 MSTORE PUSH1 0x24 DUP9 ADD SWAP3 DUP4 MSTORE DUP4 MLOAD PUSH1 0x44 DUP10 ADD MSTORE DUP4 MLOAD SWAP4 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH1 0x64 SWAP1 SWAP2 ADD SWAP3 POP SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDF7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDDF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE24 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE58 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 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xEBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0xEEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF1B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF03 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF48 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF60 DUP4 DUP4 PUSH2 0x10F1 JUMP JUMPDEST PUSH2 0xFD4 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x35E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x35E JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xFF1 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x5FC JUMPI PUSH2 0x5FC DUP2 PUSH2 0x111F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1032 PUSH2 0x9D8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID NUMBER PUSH2 0x6E6E PUSH16 0x742061646420676175676520666F7220 CODESIZE ADDRESS 0x2F ORIGIN ADDRESS KECCAK256 TIMESTAMP COINBASE 0x4C 0x2D JUMPI GASLIMIT SLOAD 0x48 KECCAK256 TIMESTAMP POP SLOAD LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC DIV DUP10 STATICCALL 0x25 DUP1 PUSH21 0x51283528293F10D6D02E083DC2FA8E0080BDD89334 GASPRICE DUP3 CREATE2 SELFDESTRUCT PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1295:6426:54:-:0;;;1879:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1879:211:54;1949:23;;;-1:-1:-1;;;1949:23:54;;;;-1:-1:-1;;;;;1949:21:54;;;;;:23;;;;;1879:211;;1949:23;;;;;;;:21;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1949:23:54;:34;;;-1:-1:-1;;;1949:34:54;;;;-1:-1:-1;;;;;1949:32:54;;;;;;:34;;;;;:23;;:34;;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1949:34:54;1143:4:35;2049:46:33;;-1:-1:-1;;;;;;1162:14:35::1;::::0;;;;;::::1;::::0;2070:1:44;1119:31:35;2175:22:44;1995:34:54;;;;;::::1;::::0;2060:23:::1;::::0;;-1:-1:-1;;;2060:23:54;;;;-1:-1:-1;;;;;1995:34:54;::::1;::::0;2060:21:::1;::::0;:23:::1;::::0;;::::1;::::0;1949:34;;2060:23;;;;;;;1995:34;2060:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;2060:23:54;2039:18:::1;:44:::0;;-1:-1:-1;;;;;2039:44:54;;::::1;-1:-1:-1::0;;;;;;2039:44:54;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;1295:6426:54;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2297": [ + { + "length": 32, + "start": 2334 + } + ], + "2486": [ + { + "length": 32, + "start": 2443 + } + ], + "7319": [ + { + "length": 32, + "start": 870 + }, + { + "length": 32, + "start": 1181 + }, + { + "length": 32, + "start": 1546 + }, + { + "length": 32, + "start": 3294 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100df5760003560e01c8063a8ea68751161008c578063bf2972d511610066578063bf2972d514610290578063e758d36b146102c3578063f3d8b4cf146102cb578063f87fcfa2146102eb576100df565b8063a8ea687514610205578063aaabadc514610238578063abfca00914610240576100df565b80636440e973116100bd5780636440e97314610170578063851c1bb3146101ac5780638d928af8146101fd576100df565b806352854ed7146100e457806358de9ade146101335780635e45a2731461013b575b600080fd5b61010a600480360360408110156100fa57600080fd5b5060ff813516906020013561031e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010a610364565b61016e6004803603602081101561015157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610388565b005b61016e6004803603604081101561018657600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013560ff16610600565b6101eb600480360360208110156101c257600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610918565b60408051918252519081900360200190f35b61010a610989565b61010a6004803603602081101561021b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109ad565b61010a6109d8565b61027c6004803603604081101561025657600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013560ff16610a58565b604080519115158252519081900360200190f35b61016e600480360360208110156102a657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b5f565b61010a610b75565b6101eb600480360360208110156102e157600080fd5b503560ff16610b91565b61016e6004803603602081101561030157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bc4565b600061035b826002600086600481111561033457fe5b600481111561033f57fe5b8152602001908152602001600020610bd790919063ffffffff16565b90505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b610390610bf3565b60008173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b815260040160206040518083038186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d602081101561040257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff808216600090815260036020526040902054919250161561049b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4475706c69636174652067617567650000000000000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d602081101561052b57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff8281169116141561059e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061118d6027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff818116600090815260036020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790556105fc826002610c39565b5050565b610608610bf3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fba03a16040518163ffffffff1660e01b815260040160206040518083038186803b15801561066e57600080fd5b505afa158015610682573d6000803e3d6000fd5b505050506040513d602081101561069857600080fd5b5051600f0b8160048111156106a957fe5b1061071557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420676175676520747970650000000000000000000000000000604482015290519081900360640190fd5b604080517fce3cc8bd00000000000000000000000000000000000000000000000000000000815260006004820152905173ffffffffffffffffffffffffffffffffffffffff84169163ce3cc8bd916024808301926020929190829003018186803b15801561078257600080fd5b505afa158015610796573d6000803e3d6000fd5b505050506040513d60208110156107ac57600080fd5b50511561081a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c696420666163746f727920696d706c656d656e746174696f6e0000604482015290519081900360640190fd5b60006002600083600481111561082c57fe5b600481111561083757fe5b8152602081019190915260400160002090506108538184610f54565b6108be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f466163746f727920616c72656164792061646465640000000000000000000000604482015290519081900360640190fd5b8160048111156108ca57fe5b6040805173ffffffffffffffffffffffffffffffffffffffff8616815290517f39a43f795b6ee7259df4404784d3b77b09d09d5fee8454c3d641d48a888e188d9181900360200190a2505050565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600360205260409020541690565b60006109e2610989565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2757600080fd5b505afa158015610a3b573d6000803e3d6000fd5b505050506040513d6020811015610a5157600080fd5b5051905090565b60008060026000846004811115610a6b57fe5b6004811115610a7657fe5b815260200190815260200160002090506000610a9182610fdc565b905060005b81811015610b5357610aa88382610fe0565b73ffffffffffffffffffffffffffffffffffffffff1663ce3cc8bd876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b0e57600080fd5b505afa158015610b22573d6000803e3d6000fd5b505050506040513d6020811015610b3857600080fd5b505115610b4b576001935050505061035e565b600101610a96565b50600095945050505050565b610b67610bf3565b610b72816004610c39565b50565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b600061035e60026000846004811115610ba657fe5b6004811115610bb157fe5b8152602001908152602001600020610fdc565b610bcc610bf3565b610b72816003610c39565b8154600090610be9908310606461101a565b61035b8383610fe0565b6000610c226000357fffffffff0000000000000000000000000000000000000000000000000000000016610918565b9050610b72610c318233611028565b61019161101a565b610c438282610a58565b610cae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420676175676500000000000000000000000000000000000000604482015290519081900360640190fd5b60015460405173ffffffffffffffffffffffffffffffffffffffff84811660248301908152921691634036176a917f0000000000000000000000000000000000000000000000000000000000000000917f3a04f900000000000000000000000000000000000000000000000000000000009187918791604401826004811115610d3357fe5b81526040805180830381526020928301825291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000978816178152815160e08a901b909716875273ffffffffffffffffffffffffffffffffffffffff881660048801908152602488019283528351604489015283519397909650919450606490910192509080838360005b83811015610df7578181015183820152602001610ddf565b50505050905090810190601f168015610e245780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610e9f57600080fd5b8101908080516040519392919084640100000000821115610ebf57600080fd5b908301906020820185811115610ed457600080fd5b8251640100000000811182820188101715610eee57600080fd5b82525081516020918201929091019080838360005b83811015610f1b578181015183820152602001610f03565b50505050905090810190601f168015610f485780820380516001836020036101000a031916815260200191505b50604052505050505050565b6000610f6083836110f1565b610fd457508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558554908252828601909352604090209190915561035e565b50600061035e565b5490565b6000826000018281548110610ff157fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169392505050565b816105fc576105fc8161111f565b60006110326109d8565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b50519392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001919091016020526040902054151590565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe43616e6e6f742061646420676175676520666f722038302f32302042414c2d5745544820425054a2646970667358221220cc0489fa25807451283528293f10d6d02e083dc2fa8e0080bdd893343a82f5ff64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA8EA6875 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBF2972D5 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBF2972D5 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0xE758D36B EQ PUSH2 0x2C3 JUMPI DUP1 PUSH4 0xF3D8B4CF EQ PUSH2 0x2CB JUMPI DUP1 PUSH4 0xF87FCFA2 EQ PUSH2 0x2EB JUMPI PUSH2 0xDF JUMP JUMPDEST DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0xABFCA009 EQ PUSH2 0x240 JUMPI PUSH2 0xDF JUMP JUMPDEST DUP1 PUSH4 0x6440E973 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x6440E973 EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1FD JUMPI PUSH2 0xDF JUMP JUMPDEST DUP1 PUSH4 0x52854ED7 EQ PUSH2 0xE4 JUMPI DUP1 PUSH4 0x58DE9ADE EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x5E45A273 EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x31E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x10A PUSH2 0x364 JUMP JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x388 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xFF AND PUSH2 0x600 JUMP JUMPDEST PUSH2 0x1EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x918 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x10A PUSH2 0x989 JUMP JUMPDEST PUSH2 0x10A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9AD JUMP JUMPDEST PUSH2 0x10A PUSH2 0x9D8 JUMP JUMPDEST PUSH2 0x27C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xFF AND PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB5F JUMP JUMPDEST PUSH2 0x10A PUSH2 0xB75 JUMP JUMPDEST PUSH2 0x1EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x16E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35B DUP3 PUSH1 0x2 PUSH1 0x0 DUP7 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x334 JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x33F JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0xBD7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBF3 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x82C63066 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP AND ISZERO PUSH2 0x49B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4475706C69636174652067617567650000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFC0C546A 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x515 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x59E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x118D PUSH1 0x27 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 DUP5 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x5FC DUP3 PUSH1 0x2 PUSH2 0xC39 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x608 PUSH2 0xBF3 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9FBA03A1 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x682 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x698 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xF SIGNEXTEND DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x6A9 JUMPI INVALID JUMPDEST LT PUSH2 0x715 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676520747970650000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xCE3CC8BD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 PUSH4 0xCE3CC8BD SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x796 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x81A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420666163746F727920696D706C656D656E746174696F6E0000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP4 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x82C JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x837 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH2 0x853 DUP2 DUP5 PUSH2 0xF54 JUMP JUMPDEST PUSH2 0x8BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x466163746F727920616C72656164792061646465640000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x8CA JUMPI INVALID JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x39A43F795B6EE7259DF4404784D3B77B09D09D5FEE8454C3D641D48A888E188D SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9E2 PUSH2 0x989 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xA6B JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xA76 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xA91 DUP3 PUSH2 0xFDC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB53 JUMPI PUSH2 0xAA8 DUP4 DUP3 PUSH2 0xFE0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCE3CC8BD DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB22 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0xB4B JUMPI PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x35E JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xA96 JUMP JUMPDEST POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB67 PUSH2 0xBF3 JUMP JUMPDEST PUSH2 0xB72 DUP2 PUSH1 0x4 PUSH2 0xC39 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35E PUSH1 0x2 PUSH1 0x0 DUP5 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xBA6 JUMPI INVALID JUMPDEST PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xBB1 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0xFDC JUMP JUMPDEST PUSH2 0xBCC PUSH2 0xBF3 JUMP JUMPDEST PUSH2 0xB72 DUP2 PUSH1 0x3 PUSH2 0xC39 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xBE9 SWAP1 DUP4 LT PUSH1 0x64 PUSH2 0x101A JUMP JUMPDEST PUSH2 0x35B DUP4 DUP4 PUSH2 0xFE0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC22 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x918 JUMP JUMPDEST SWAP1 POP PUSH2 0xB72 PUSH2 0xC31 DUP3 CALLER PUSH2 0x1028 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x101A JUMP JUMPDEST PUSH2 0xC43 DUP3 DUP3 PUSH2 0xA58 JUMP JUMPDEST PUSH2 0xCAE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676500000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD SWAP1 DUP2 MSTORE SWAP3 AND SWAP2 PUSH4 0x4036176A SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x3A04F90000000000000000000000000000000000000000000000000000000000 SWAP2 DUP8 SWAP2 DUP8 SWAP2 PUSH1 0x44 ADD DUP3 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xD33 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD DUP3 MSTORE SWAP2 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP8 DUP9 AND OR DUP2 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL SWAP1 SWAP8 AND DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x4 DUP9 ADD SWAP1 DUP2 MSTORE PUSH1 0x24 DUP9 ADD SWAP3 DUP4 MSTORE DUP4 MLOAD PUSH1 0x44 DUP10 ADD MSTORE DUP4 MLOAD SWAP4 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH1 0x64 SWAP1 SWAP2 ADD SWAP3 POP SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDF7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDDF JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE24 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE58 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 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xEBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0xEEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF1B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF03 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xF48 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF60 DUP4 DUP4 PUSH2 0x10F1 JUMP JUMPDEST PUSH2 0xFD4 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x35E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x35E JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xFF1 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x5FC JUMPI PUSH2 0x5FC DUP2 PUSH2 0x111F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1032 PUSH2 0x9D8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID NUMBER PUSH2 0x6E6E PUSH16 0x742061646420676175676520666F7220 CODESIZE ADDRESS 0x2F ORIGIN ADDRESS KECCAK256 TIMESTAMP COINBASE 0x4C 0x2D JUMPI GASLIMIT SLOAD 0x48 KECCAK256 TIMESTAMP POP SLOAD LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC DIV DUP10 STATICCALL 0x25 DUP1 PUSH21 0x51283528293F10D6D02E083DC2FA8E0080BDD89334 GASPRICE DUP3 CREATE2 SELFDESTRUCT PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1295:6426:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3204:175;;;;;;;;;;;;;;;;-1:-1:-1;3204:175:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2381:120;;;:::i;4777:684::-;;;;;;;;;;;;;;;;-1:-1:-1;4777:684:54;;;;:::i;:::-;;6454:675;;;;;;;;;;;;;;;;-1:-1:-1;6454:675:54;;;;;;;;;;;:::i;2607:430:33:-;;;;;;;;;;;;;;;;-1:-1:-1;2607:430:33;;;;:::i;:::-;;;;;;;;;;;;;;;;1247:79:35;;;:::i;2985:124:54:-;;;;;;;;;;;;;;;;-1:-1:-1;2985:124:54;;;;:::i;1386:109:35:-;;;:::i;3780:649:54:-;;;;;;;;;;;;;;;;-1:-1:-1;3780:649:54;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6200:133;;;;;;;;;;;;;;;;-1:-1:-1;6200:133:54;;;;:::i;2183:117::-;;;:::i;3475:164::-;;;;;;;;;;;;;;;;-1:-1:-1;3475:164:54;;;;:::i;5764:131::-;;;;;;;;;;;;;;;;-1:-1:-1;5764:131:54;;;;:::i;3204:175::-;3304:7;3330:42;3366:5;3330:21;:32;3352:9;3330:32;;;;;;;;;;;;;;;;;;;;;;;;;;;:35;;:42;;;;:::i;:::-;3323:49;;3204:175;;;;;:::o;2381:120::-;2478:16;2381:120;:::o;4777:684::-;2276:21:33;:19;:21::i;:::-;5164:11:54::1;5178:5;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5178:16:54;5212:38:::1;:16:::0;;::::1;5248:1;5212:16:::0;;;:10:::1;5178:16;5212::::0;;;;;5178;;-1:-1:-1;5212:16:54::1;:38:::0;5204:66:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5296:16;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5296:24:54;5288:32:::1;::::0;;::::1;::::0;::::1;;;5280:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5374:16;::::0;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:24;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5409:45:::1;5374:24:::0;5435:18:::1;5409:9;:45::i;:::-;2307:1:33;4777:684:54::0;:::o;6454:675::-;2276:21:33;:19;:21::i;:::-;6676:16:54::1;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6676:32:54;6668:41:::1;;6655:9:::0;6647:18:::1;::::0;::::1;;;;;;:62;6639:93;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6823:38;::::0;;;;;6858:1:::1;6823:38;::::0;::::1;::::0;;;:26:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;:26;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6823:38:54;6822:39:::1;6814:82;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6907:47;6957:21;:32;6979:9;6957:32;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;6957:32:54;;-1:-1:-1;7007:36:54::1;6957:32:::0;7034:7;7007:18:::1;:36::i;:::-;6999:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7103:9;7085:37;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;2307:1:33;6454:675:54::0;;:::o;2607:430:33:-;2979:50;;;2996:22;2979:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2969:61;;;;;2607:430;;;:::o;1247:79:35:-;1313:6;1247:79;:::o;2985:124:54:-;3086:16;;;;3052:15;3086:16;;;:10;:16;;;;;;;;2985:124::o;1386:109:35:-;1432:11;1462:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1462:26:35;;-1:-1:-1;1386:109:35;:::o;3780:649:54:-;3879:4;3895:47;3945:21;:32;3967:9;3945:32;;;;;;;;;;;;;;;;;;;;;;;;;;;3895:82;;3987:28;4018:23;:14;:21;:23::i;:::-;3987:54;;4204:9;4199:201;4219:20;4215:1;:24;4199:201;;;4287:30;:14;4315:1;4287:27;:30::i;:::-;4264:73;;;4338:5;4264:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4264:80:54;4260:130;;;4371:4;4364:11;;;;;;;4260:130;4241:3;;4199:201;;;-1:-1:-1;4417:5:54;;3780:649;-1:-1:-1;;;;;3780:649:54:o;6200:133::-;2276:21:33;:19;:21::i;:::-;6286:40:54::1;6296:9;6307:18;6286:9;:40::i;:::-;6200:133:::0;:::o;2183:117::-;2275:18;;;;2183:117;:::o;3475:164::-;3565:7;3591:41;:21;:32;3613:9;3591:32;;;;;;;;;;;;;;;;;;;;;;;;;;;:39;:41::i;5764:131::-;2276:21:33;:19;:21::i;:::-;5849:39:54::1;5859:9;5870:17;5849:9;:39::i;4648:199:43:-:0;4750:18;;4722:7;;4741:58;;4750:26;-1:-1:-1;4838:3:20;4741:8:43;:58::i;:::-;4816:24;4829:3;4834:5;4816:12;:24::i;2420:181:33:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9040:3:20;2524:8:33;:70::i;7278:441:54:-;7359:41;7383:5;7390:9;7359:23;:41::i;:::-;7351:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7540:18;;7625:77;;7540:18;7625:77;;;;;;;;;7540:18;;;:32;;7594:16;;7648:35;;7685:5;;7692:9;;7625:77;;7692:9;7625:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7540:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7625:77;;7540:172;;-1:-1:-1;7540:172:54;;-1:-1:-1;7540:172:54;;;;;-1:-1:-1;7625:77:54;7540:172;;7625:77;;7540:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7540:172:54;;;;;;;;;;-1:-1:-1;7540:172:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7278:441;;:::o;1851:410:43:-;1921:4;1942:20;1951:3;1956:5;1942:8;:20::i;:::-;1937:318;;-1:-1:-1;1978:23:43;;;;;;;;-1:-1:-1;1978:23:43;;;;;;;;;;;;;;;;;;;;;;;2158:18;;2136:19;;;:12;;;:19;;;;;;:40;;;;2190:11;;1937:318;-1:-1:-1;2239:5:43;2232:12;;4192:114;4281:18;;4192:114::o;5212:135::-;5296:7;5322:3;:11;;5334:5;5322:18;;;;;;;;;;;;;;;;;;;;;5212:135;-1:-1:-1;;;5212:135:43:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;1501:178:35:-;1589:4;1612:15;:13;:15::i;:::-;:26;;;1639:8;1649:7;1666:4;1612:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1612:60:35;;1501:178;-1:-1:-1;;;1501:178:35:o;3977:134:43:-;4080:19;;4057:4;4080:19;;;:12;;;;;:19;;;;;;:24;;;3977:134::o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "methodIdentifiers": { + "addArbitrumGauge(address)": "bf2972d5", + "addEthereumGauge(address)": "5e45a273", + "addGaugeFactory(address,uint8)": "6440e973", + "addPolygonGauge(address)": "f87fcfa2", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getAuthorizerAdaptor()": "e758d36b", + "getFactoryForGaugeType(uint8,uint256)": "52854ed7", + "getFactoryForGaugeTypeCount(uint8)": "f3d8b4cf", + "getGaugeController()": "58de9ade", + "getPoolGauge(address)": "a8ea6875", + "getVault()": "8d928af8", + "isGaugeFromValidFactory(address,uint8)": "abfca009" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IGaugeController\",\"name\":\"gaugeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contract ILiquidityGaugeFactory\",\"name\":\"gaugeFactory\",\"type\":\"address\"}],\"name\":\"GaugeFactoryAdded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rootGauge\",\"type\":\"address\"}],\"name\":\"addArbitrumGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IStakingLiquidityGauge\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"addEthereumGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ILiquidityGaugeFactory\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"}],\"name\":\"addGaugeFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rootGauge\",\"type\":\"address\"}],\"name\":\"addPolygonGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizerAdaptor\",\"outputs\":[{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getFactoryForGaugeType\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"}],\"name\":\"getFactoryForGaugeTypeCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeController\",\"outputs\":[{\"internalType\":\"contract IGaugeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"enum IGaugeAdder.GaugeType\",\"name\":\"gaugeType\",\"type\":\"uint8\"}],\"name\":\"isGaugeFromValidFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getPoolGauge(address)\":{\"details\":\"Gauge Factories also implement a `getPoolGauge` function which maps pools to gauges which it has deployed. This function provides global information by using which gauge has been added to the Gauge Controller to represent the canonical gauge for a given pool address.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addArbitrumGauge(address)\":{\"notice\":\"Adds a new gauge to the GaugeController for the \\\"Arbitrum\\\" type. This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. It should not be called with the address of the gauge which is deployed on Arbitrum\"},\"addEthereumGauge(address)\":{\"notice\":\"Adds a new gauge to the GaugeController for the \\\"Ethereum\\\" type.\"},\"addGaugeFactory(address,uint8)\":{\"notice\":\"Adds `factory` as an allowlisted factory contract for gauges with type `gaugeType`.\"},\"addPolygonGauge(address)\":{\"notice\":\"Adds a new gauge to the GaugeController for the \\\"Polygon\\\" type. This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. It should not be called with the address of the gauge which is deployed on Polygon\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getAuthorizerAdaptor()\":{\"notice\":\"Returns the address of the Authorizer adaptor contract.\"},\"getFactoryForGaugeType(uint8,uint256)\":{\"notice\":\"Returns the `index`'th factory for gauge type `gaugeType`\"},\"getFactoryForGaugeTypeCount(uint8)\":{\"notice\":\"Returns the number of factories for gauge type `gaugeType`\"},\"getGaugeController()\":{\"notice\":\"Returns the address of the Gauge Controller\"},\"getPoolGauge(address)\":{\"notice\":\"Returns the gauge corresponding to a Balancer pool `pool` on Ethereum mainnet. Only returns gauges which have been added to the Gauge Controller.\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"},\"isGaugeFromValidFactory(address,uint8)\":{\"notice\":\"Returns whether `gauge` has been deployed by one of the listed factories for the gauge type `gaugeType`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/admin/GaugeAdder.sol\":\"GaugeAdder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol\":{\"keccak256\":\"0x5b2f2de5c90bd3f1febfef21253d438f12e416982f82ffb949b8426a588e560a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://80acca63b490782caac2e401e64c42cf29d7b5f3c31e61b20f8da2fc4921f815\",\"dweb:/ipfs/QmPagWgv3EoqRRazmzP25JiAhC2r51s2sNJ2sNuBa1KFxn\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":{\"keccak256\":\"0x0c992c65f6cf48ce430d14518b1c402faf11f50fc3683321ea7dfb808eb3f3a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9d182e07a81d3444297d6a751c2a68ddf05b4f1b16c962ef0fe5389f1674309\",\"dweb:/ipfs/QmQYKQ1YecKzkGGrVxjexGEoxU8BPojfJCsNKp5VgYRFtA\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol\":{\"keccak256\":\"0xd65a23d87f8e22666d447cc91b2827622c652d074af328fa2d21d7b5a2a3f9dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88879d955c8720f8128dbc345336c74185474d7d41ff1327c298b4389c501c73\",\"dweb:/ipfs/QmSWfrTMxF7WpGX8e4oxjzP97smNE2SB9yE8rMLfPM8NYB\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa644f3f9066d6a300bd7c1c214ce55c1569bb5ec54815d49c5c7a1a63cd03df3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81ee2467e6a0f340d64738d7a03a407e88caa5ee31cb3c8bd6990985f1891acc\",\"dweb:/ipfs/QmP7s6CSdDLGFjNxi9Q8GEVJFiD6QkeseGD857bPE7E7Ki\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/admin/GaugeAdder.sol\":{\"keccak256\":\"0x51afba10e9e84bcf3bd8ff4a8e2a86d76647360cc1d7bcffae258c148013c8ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a33d4574d7f59e4e1aa6dc159bde5e78efc59b452d71fd2e3e15a9edd4e22dc3\",\"dweb:/ipfs/QmXxpYfJyNGcBEd7N1cwj2PKuU6ryDULvWmAELfcENTX3z\"]}},\"version\":1}" + } + }, + "contracts/fee-distribution/FeeDistributor.sol": { + "FeeDistributor": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVotingEscrow", + "name": "votingEscrow", + "type": "address" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lastCheckpointTimestamp", + "type": "uint256" + } + ], + "name": "TokenCheckpointed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "userTokenTimeCursor", + "type": "uint256" + } + ], + "name": "TokensClaimed", + "type": "event" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "checkpointToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "checkpointTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "checkpointUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "claimToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "claimTokens", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "depositToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "depositTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenLastBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getTokensDistributedInWeek", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getTotalSupplyAtTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "getUserBalanceAtTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getUserTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getUserTokenTimeCursor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVotingEscrow", + "outputs": [ + { + "internalType": "contract IVotingEscrow", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60c06040523480156200001157600080fd5b5060405162001fce38038062001fce83398101604081905262000034916200015d565b60016000556001600160601b0319606083901b16608052620000568162000151565b90506000620000654262000151565b905080821015620000935760405162461bcd60e51b81526004016200008a90620001b0565b60405180910390fd5b80821415620001415760405163bd85b03960e01b81526000906001600160a01b0385169063bd85b03990620000cd9085906004016200022d565b60206040518083038186803b158015620000e657600080fd5b505afa158015620000fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000121919062000197565b11620001415760405162461bcd60e51b81526004016200008a90620001e5565b5060a08190526001555062000236565b62093a80908190040290565b6000806040838503121562000170578182fd5b82516001600160a01b038116811462000187578283fd5b6020939093015192949293505050565b600060208284031215620001a9578081fd5b5051919050565b6020808252818101527f43616e6e6f74207374617274206265666f72652063757272656e74207765656b604082015260600190565b60208082526028908201527f5a65726f20746f74616c20737570706c7920726573756c747320696e206c6f736040820152677420746f6b656e7360c01b606082015260800190565b90815260200190565b60805160601c60a051611d446200028a600039806104bb528061085452806109a45280610d22525080610276528061077652806109115280610ac4528061122d528061130152806115e65250611d446000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806382aa5ad4116100b2578063acbc142811610081578063ca31879d11610066578063ca31879d1461023b578063d3dc4ca11461024e578063de681faf146102615761011b565b8063acbc142814610220578063c2c4c5c1146102335761011b565b806382aa5ad4146101d2578063876e69a1146101da57806388720467146101ed578063905d10ac1461020d5761011b565b80633902b9bc116100ee5780633902b9bc146101865780634f3c5090146101995780637b8d6221146101ac5780638050a7ee146101bf5761011b565b806308b0308a1461012057806314866e081461013e5780632308805b14610153578063338b5dea14610173575b600080fd5b610128610274565b6040516101359190611b2f565b60405180910390f35b61015161014c3660046118bc565b610298565b005b6101666101613660046118bc565b6102b4565b6040516101359190611ce3565b610151610181366004611963565b610302565b6101516101943660046118bc565b61034e565b6101666101a7366004611ac6565b610361565b6101516101ba3660046119ce565b610373565b6101666101cd36600461192b565b610456565b61016661046b565b6101666101e83660046118bc565b610471565b6102006101fb3660046118d8565b6104af565b6040516101359190611bdd565b61015161021b36600461198e565b6105e9565b61016661022e3660046118bc565b61061e565b61015161065c565b61016661024936600461192b565b610676565b61016661025c366004611963565b6106b3565b61016661026f366004611963565b6106e8565b7f000000000000000000000000000000000000000000000000000000000000000090565b6102a061071d565b6102a981610736565b6102b1610c93565b50565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61030a61071d565b610315826000610c9a565b61033773ffffffffffffffffffffffffffffffffffffffff83163330846110c4565b610342826001610c9a565b61034a610c93565b5050565b61035661071d565b6102a9816001610c9a565b60009081526002602052604090205490565b61037b61071d565b6103858382611167565b8260005b81811015610446576103bc8686838181106103a057fe5b90506020020160208101906103b591906118bc565b6000610c9a565b61041333308686858181106103cd57fe5b905060200201358989868181106103e057fe5b90506020020160208101906103f591906118bc565b73ffffffffffffffffffffffffffffffffffffffff169291906110c4565b61043e86868381811061042257fe5b905060200201602081019061043791906118bc565b6001610c9a565b600101610389565b5050610450610c93565b50505050565b60006104628383611174565b90505b92915050565b60015490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205468010000000000000000900467ffffffffffffffff1690565b60606104b961071d565b7f0000000000000000000000000000000000000000000000000000000000000000421161051b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b60405180910390fd5b61052361120c565b61052c84610736565b8160608167ffffffffffffffff8111801561054657600080fd5b50604051908082528060200260200182016040528015610570578160200160208202803683370190505b50905060005b828110156105d65761058d8686838181106103a057fe5b6105b78787878481811061059d57fe5b90506020020160208101906105b291906118bc565b6113ac565b8282815181106105c357fe5b6020908102919091010152600101610576565b509150506105e2610c93565b9392505050565b6105f161071d565b8060005b818110156106145761060c84848381811061042257fe5b6001016105f5565b505061034a610c93565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205468010000000000000000900467ffffffffffffffff1690565b61066461071d565b61066c61120c565b610674610c93565b565b600061068061071d565b61068861120c565b610693826000610c9a565b61069c83610736565b60006106a884846113ac565b915050610465610c93565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460209081526040808320938352929052205490565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b61072f60026000541415610190611570565b6002600055565b6040517f010ae75700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063010ae757906107ab908590600401611b2f565b60206040518083038186803b1580156107c357600080fd5b505afa1580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb9190611ade565b90508061080857506102b1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600560205260408120805490916801000000000000000090910467ffffffffffffffff16908161088057610879857f00000000000000000000000000000000000000000000000000000000000000008661157e565b90506108c3565b6108894261169e565b82141561089957505050506102b1565b50815470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b806108cc575060015b6108d4611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d47906109489089908690600401611bb7565b60806040518083038186803b15801561096057600080fd5b505afa158015610974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109989190611a57565b905082610a0a576109d57f00000000000000000000000000000000000000000000000000000000000000006109d083604001516116aa565b6116ba565b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff821617855592505b610a12611833565b60005b6032811015610bf85742851115610a2b57610bf8565b82604001518510158015610a3f5750868411155b15610b535760018401935082915086841115610a875760405180608001604052806000600f0b81526020016000600f0b81526020016000815260200160008152509250610b4e565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d4790610afb908b908890600401611bb7565b60806040518083038186803b158015610b1357600080fd5b505afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190611a57565b92505b610bf0565b6000826040015186039050600081846020015102600f0b8460000151600f0b13610b7e576000610b8f565b81846020015102846000015103600f0b5b905080158015610b9e57508886115b15610bb557610bac426116aa565b96505050610bf8565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526006602090815260408083208a84529091529020555062093a80909401935b600101610a15565b505083546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290920167ffffffffffffffff90811670010000000000000000000000000000000002929092177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1668010000000000000000939092169290920217909155505050565b6001600055565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805490916801000000000000000090910467ffffffffffffffff169081610d7e57429150610cec4261169e565b83547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff919091161783557f00000000000000000000000000000000000000000000000000000000000000004211610d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b610dd0565b814203905083610dd0576000610d938361169e565b610d9c4261169e565b14905060006201518042610daf426116aa565b03109050818015610dbe575080155b15610dcd57505050505061034a565b50505b82547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff16021783556040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190610e62903090600401611b2f565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190611ade565b8454909150600090610eeb90839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166116d1565b905080610efc57505050505061034a565b6fffffffffffffffffffffffffffffffff821115610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c4f565b84546fffffffffffffffffffffffffffffffff8084167001000000000000000000000000000000000291161785556000610f7f8561169e565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260046020526040812091925090815b601481101561107c578362093a800192508242101561101a5786158015610fd057508742145b15610fee576000848152602083905260409020805486019055611015565b86884203860281610ffb57fe5b600086815260208590526040902080549290910490910190555b61107c565b8615801561102757508783145b1561104557600084815260208390526040902080548601905561106c565b8688840386028161105257fe5b600086815260208590526040902080549290910490910190555b9196508692508291600101610faa565b507f9b7f1a85a4c9b4e59e1b6527d9969c50cdfb3a1a467d0c4a51fb0ed8bf07f1308a85896040516110b093929190611c21565b60405180910390a150505050505050505050565b610450846323b872dd60e01b8585856040516024016110e593929190611b50565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116df565b61034a8183146067611570565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260076020908152604080832093851683529290529081205480156111b6579050610465565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260056020908152604080832054938716835260039091529020546112049167ffffffffffffffff90811691166116ba565b949350505050565b600154600061121a4261169e565b90508082111561122b575050610674565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c2c4c5c16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561129357600080fd5b505af11580156112a7573d6000803e3d6000fd5b5050505060005b60148110156113a557818311156112c4576113a5565b6040517fbd85b03900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063bd85b03990611336908690600401611ce3565b60206040518083038186803b15801561134e57600080fd5b505afa158015611362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113869190611ade565b60008481526002602052604090205562093a80909201916001016112ae565b5050600155565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120816113dc8585611174565b82549091506000906114039068010000000000000000900467ffffffffffffffff1661169e565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600460209081526040808320938b16835260069091528120929350909190805b60148110156114945784861061145557611494565b6000868152600260209081526040808320548683528184205492889052922054028161147d57fe5b62093a809790970196049190910190600101611440565b5073ffffffffffffffffffffffffffffffffffffffff808a166000908152600760209081526040808320938c1683529290522085905580156115645785546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216849003821602911617865561152673ffffffffffffffffffffffffffffffffffffffff89168a8361178c565b7fff097c7d8b1957a4ff09ef1361b5fb54dcede3941ba836d0beb9d10bec725de68989838860405161155b9493929190611b81565b60405180910390a15b98975050505050505050565b8161034a5761034a816117b0565b60008082815b60808110156116935781831061159957611693565b60028284018101046115a9611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d479061161d908c908690600401611bb7565b60806040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190611a57565b90508781604001511161168257819450611689565b6001820393505b5050600101611584565b509095945050505050565b62093a80908190040290565b600061046562093a7f830161169e565b6000818310156116ca5781610462565b5090919050565b60006104628383600161181d565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516117089190611af6565b6000604051808303816000865af19150503d8060008114611745576040519150601f19603f3d011682016040523d82523d6000602084013e61174a565b606091505b50915091506000821415611762573d6000803e3d6000fd5b6104508151600014806117845750818060200190518101906117849190611a37565b6101a2611570565b6117ab8363a9059cbb60e01b84846040516024016110e5929190611bb7565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600061182c8484111583611570565b5050900390565b60405180608001604052806000600f0b81526020016000600f0b815260200160008152602001600081525090565b60008083601f840112611872578182fd5b50813567ffffffffffffffff811115611889578182fd5b60208301915083602080830285010111156118a357600080fd5b9250929050565b8051600f81900b811461046557600080fd5b6000602082840312156118cd578081fd5b81356105e281611cec565b6000806000604084860312156118ec578182fd5b83356118f781611cec565b9250602084013567ffffffffffffffff811115611912578283fd5b61191e86828701611861565b9497909650939450505050565b6000806040838503121561193d578182fd5b823561194881611cec565b9150602083013561195881611cec565b809150509250929050565b60008060408385031215611975578182fd5b823561198081611cec565b946020939093013593505050565b600080602083850312156119a0578182fd5b823567ffffffffffffffff8111156119b6578283fd5b6119c285828601611861565b90969095509350505050565b600080600080604085870312156119e3578081fd5b843567ffffffffffffffff808211156119fa578283fd5b611a0688838901611861565b90965094506020870135915080821115611a1e578283fd5b50611a2b87828801611861565b95989497509550505050565b600060208284031215611a48578081fd5b815180151581146105e2578182fd5b600060808284031215611a68578081fd5b6040516080810181811067ffffffffffffffff82111715611a87578283fd5b604052611a9484846118aa565b8152611aa384602085016118aa565b602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215611ad7578081fd5b5035919050565b600060208284031215611aef578081fd5b5051919050565b60008251815b81811015611b165760208186018101518583015201611afc565b81811115611b245782828501525b509190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252601e908201527f4d6178696d756d20746f6b656e2062616c616e63652065786365656465640000604082015260600190565b60208082526024908201527f46656520646973747269627574696f6e20686173206e6f74207374617274656460408201527f2079657400000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff811681146102b157600080fdfea2646970667358221220f9654b64fd66c095f134a1ede0899a5b3467940a75b869b0b2309f7c20a379fe64736f6c63430007010033", + "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1FCE CODESIZE SUB DUP1 PUSH3 0x1FCE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x15D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP4 SWAP1 SHL AND PUSH1 0x80 MSTORE PUSH3 0x56 DUP2 PUSH3 0x151 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x65 TIMESTAMP PUSH3 0x151 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH3 0x93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x8A SWAP1 PUSH3 0x1B0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP3 EQ ISZERO PUSH3 0x141 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBD85B039 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0xBD85B039 SWAP1 PUSH3 0xCD SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH3 0x22D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x121 SWAP2 SWAP1 PUSH3 0x197 JUMP JUMPDEST GT PUSH3 0x141 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x8A SWAP1 PUSH3 0x1E5 JUMP JUMPDEST POP PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH1 0x1 SSTORE POP PUSH3 0x236 JUMP JUMPDEST PUSH3 0x93A80 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x170 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x187 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1A9 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x43616E6E6F74207374617274206265666F72652063757272656E74207765656B PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x28 SWAP1 DUP3 ADD MSTORE PUSH32 0x5A65726F20746F74616C20737570706C7920726573756C747320696E206C6F73 PUSH1 0x40 DUP3 ADD MSTORE PUSH8 0x7420746F6B656E73 PUSH1 0xC0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH2 0x1D44 PUSH3 0x28A PUSH1 0x0 CODECOPY DUP1 PUSH2 0x4BB MSTORE DUP1 PUSH2 0x854 MSTORE DUP1 PUSH2 0x9A4 MSTORE DUP1 PUSH2 0xD22 MSTORE POP DUP1 PUSH2 0x276 MSTORE DUP1 PUSH2 0x776 MSTORE DUP1 PUSH2 0x911 MSTORE DUP1 PUSH2 0xAC4 MSTORE DUP1 PUSH2 0x122D MSTORE DUP1 PUSH2 0x1301 MSTORE DUP1 PUSH2 0x15E6 MSTORE POP PUSH2 0x1D44 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 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82AA5AD4 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xACBC1428 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xCA31879D GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xCA31879D EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0xD3DC4CA1 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0xDE681FAF EQ PUSH2 0x261 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xACBC1428 EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x233 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x82AA5AD4 EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x876E69A1 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0x88720467 EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0x905D10AC EQ PUSH2 0x20D JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x3902B9BC GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3902B9BC EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x4F3C5090 EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0x7B8D6221 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x8050A7EE EQ PUSH2 0x1BF JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x8B0308A EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x14866E08 EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x2308805B EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x338B5DEA EQ PUSH2 0x173 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128 PUSH2 0x274 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x151 PUSH2 0x14C CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x166 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x2B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x1CE3 JUMP JUMPDEST PUSH2 0x151 PUSH2 0x181 CALLDATASIZE PUSH1 0x4 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x302 JUMP JUMPDEST PUSH2 0x151 PUSH2 0x194 CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x34E JUMP JUMPDEST PUSH2 0x166 PUSH2 0x1A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AC6 JUMP JUMPDEST PUSH2 0x361 JUMP JUMPDEST PUSH2 0x151 PUSH2 0x1BA CALLDATASIZE PUSH1 0x4 PUSH2 0x19CE JUMP JUMPDEST PUSH2 0x373 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x1CD CALLDATASIZE PUSH1 0x4 PUSH2 0x192B JUMP JUMPDEST PUSH2 0x456 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x46B JUMP JUMPDEST PUSH2 0x166 PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x471 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0x18D8 JUMP JUMPDEST PUSH2 0x4AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x1BDD JUMP JUMPDEST PUSH2 0x151 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x198E JUMP JUMPDEST PUSH2 0x5E9 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x61E JUMP JUMPDEST PUSH2 0x151 PUSH2 0x65C JUMP JUMPDEST PUSH2 0x166 PUSH2 0x249 CALLDATASIZE PUSH1 0x4 PUSH2 0x192B JUMP JUMPDEST PUSH2 0x676 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x6B3 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x26F CALLDATASIZE PUSH1 0x4 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x6E8 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x2A9 DUP2 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0xC93 JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x30A PUSH2 0x71D JUMP JUMPDEST PUSH2 0x315 DUP3 PUSH1 0x0 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x337 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x342 DUP3 PUSH1 0x1 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x34A PUSH2 0xC93 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x356 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x2A9 DUP2 PUSH1 0x1 PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37B PUSH2 0x71D JUMP JUMPDEST PUSH2 0x385 DUP4 DUP3 PUSH2 0x1167 JUMP JUMPDEST DUP3 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x446 JUMPI PUSH2 0x3BC DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x3A0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3B5 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x413 CALLER ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x3CD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP10 DUP10 DUP7 DUP2 DUP2 LT PUSH2 0x3E0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3F5 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 SWAP1 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x43E DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x422 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x437 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH1 0x1 PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x389 JUMP JUMPDEST POP POP PUSH2 0x450 PUSH2 0xC93 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x462 DUP4 DUP4 PUSH2 0x1174 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4B9 PUSH2 0x71D JUMP JUMPDEST PUSH32 0x0 TIMESTAMP GT PUSH2 0x51B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x512 SWAP1 PUSH2 0x1C86 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x523 PUSH2 0x120C JUMP JUMPDEST PUSH2 0x52C DUP5 PUSH2 0x736 JUMP JUMPDEST DUP2 PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x570 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 0x5D6 JUMPI PUSH2 0x58D DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x3A0 JUMPI INVALID JUMPDEST PUSH2 0x5B7 DUP8 DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x59D JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x5B2 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x13AC JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x5C3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x576 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x5E2 PUSH2 0xC93 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5F1 PUSH2 0x71D JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x614 JUMPI PUSH2 0x60C DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x422 JUMPI INVALID JUMPDEST PUSH1 0x1 ADD PUSH2 0x5F5 JUMP JUMPDEST POP POP PUSH2 0x34A PUSH2 0xC93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x664 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x66C PUSH2 0x120C JUMP JUMPDEST PUSH2 0x674 PUSH2 0xC93 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x680 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x688 PUSH2 0x120C JUMP JUMPDEST PUSH2 0x693 DUP3 PUSH1 0x0 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x69C DUP4 PUSH2 0x736 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A8 DUP5 DUP5 PUSH2 0x13AC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x465 PUSH2 0xC93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x72F PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x1570 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x10AE75700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x10AE757 SWAP1 PUSH2 0x7AB SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x7FB SWAP2 SWAP1 PUSH2 0x1ADE JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x808 JUMPI POP PUSH2 0x2B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 PUSH9 0x10000000000000000 SWAP1 SWAP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH2 0x880 JUMPI PUSH2 0x879 DUP6 PUSH32 0x0 DUP7 PUSH2 0x157E JUMP JUMPDEST SWAP1 POP PUSH2 0x8C3 JUMP JUMPDEST PUSH2 0x889 TIMESTAMP PUSH2 0x169E JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x899 JUMPI POP POP POP POP PUSH2 0x2B1 JUMP JUMPDEST POP DUP2 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST DUP1 PUSH2 0x8CC JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x8D4 PUSH2 0x1833 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x28D09D4700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x28D09D47 SWAP1 PUSH2 0x948 SWAP1 DUP10 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BB7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x960 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x974 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x998 SWAP2 SWAP1 PUSH2 0x1A57 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0xA0A JUMPI PUSH2 0x9D5 PUSH32 0x0 PUSH2 0x9D0 DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x16BA JUMP JUMPDEST DUP5 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND OR DUP6 SSTORE SWAP3 POP JUMPDEST PUSH2 0xA12 PUSH2 0x1833 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x32 DUP2 LT ISZERO PUSH2 0xBF8 JUMPI TIMESTAMP DUP6 GT ISZERO PUSH2 0xA2B JUMPI PUSH2 0xBF8 JUMP JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD DUP6 LT ISZERO DUP1 ISZERO PUSH2 0xA3F JUMPI POP DUP7 DUP5 GT ISZERO JUMPDEST ISZERO PUSH2 0xB53 JUMPI PUSH1 0x1 DUP5 ADD SWAP4 POP DUP3 SWAP2 POP DUP7 DUP5 GT ISZERO PUSH2 0xA87 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP3 POP PUSH2 0xB4E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x28D09D4700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x28D09D47 SWAP1 PUSH2 0xAFB SWAP1 DUP12 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BB7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xB4B SWAP2 SWAP1 PUSH2 0x1A57 JUMP JUMPDEST SWAP3 POP JUMPDEST PUSH2 0xBF0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 ADD MLOAD DUP7 SUB SWAP1 POP PUSH1 0x0 DUP2 DUP5 PUSH1 0x20 ADD MLOAD MUL PUSH1 0xF SIGNEXTEND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0xF SIGNEXTEND SGT PUSH2 0xB7E JUMPI PUSH1 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP2 DUP5 PUSH1 0x20 ADD MLOAD MUL DUP5 PUSH1 0x0 ADD MLOAD SUB PUSH1 0xF SIGNEXTEND JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0xB9E JUMPI POP DUP9 DUP7 GT JUMPDEST ISZERO PUSH2 0xBB5 JUMPI PUSH2 0xBAC TIMESTAMP PUSH2 0x16AA JUMP JUMPDEST SWAP7 POP POP POP PUSH2 0xBF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE POP PUSH3 0x93A80 SWAP1 SWAP5 ADD SWAP4 JUMPDEST PUSH1 0x1 ADD PUSH2 0xA15 JUMP JUMPDEST POP POP DUP4 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 ADD PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 SWAP1 SWAP3 OR PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF AND PUSH9 0x10000000000000000 SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL OR SWAP1 SWAP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 PUSH9 0x10000000000000000 SWAP1 SWAP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH2 0xD7E JUMPI TIMESTAMP SWAP2 POP PUSH2 0xCEC TIMESTAMP PUSH2 0x169E JUMP JUMPDEST DUP4 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR DUP4 SSTORE PUSH32 0x0 TIMESTAMP GT PUSH2 0xD79 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x512 SWAP1 PUSH2 0x1C86 JUMP JUMPDEST PUSH2 0xDD0 JUMP JUMPDEST DUP2 TIMESTAMP SUB SWAP1 POP DUP4 PUSH2 0xDD0 JUMPI PUSH1 0x0 PUSH2 0xD93 DUP4 PUSH2 0x169E JUMP JUMPDEST PUSH2 0xD9C TIMESTAMP PUSH2 0x169E JUMP JUMPDEST EQ SWAP1 POP PUSH1 0x0 PUSH3 0x15180 TIMESTAMP PUSH2 0xDAF TIMESTAMP PUSH2 0x16AA JUMP JUMPDEST SUB LT SWAP1 POP DUP2 DUP1 ISZERO PUSH2 0xDBE JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xDCD JUMPI POP POP POP POP POP PUSH2 0x34A JUMP JUMPDEST POP POP JUMPDEST DUP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF AND PUSH9 0x10000000000000000 TIMESTAMP PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR DUP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xE62 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xEB2 SWAP2 SWAP1 PUSH2 0x1ADE JUMP JUMPDEST DUP5 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xEEB SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x16D1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xEFC JUMPI POP POP POP POP POP PUSH2 0x34A JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x512 SWAP1 PUSH2 0x1C4F JUMP JUMPDEST DUP5 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR DUP6 SSTORE PUSH1 0x0 PUSH2 0xF7F DUP6 PUSH2 0x169E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP3 POP SWAP1 DUP2 JUMPDEST PUSH1 0x14 DUP2 LT ISZERO PUSH2 0x107C JUMPI DUP4 PUSH3 0x93A80 ADD SWAP3 POP DUP3 TIMESTAMP LT ISZERO PUSH2 0x101A JUMPI DUP7 ISZERO DUP1 ISZERO PUSH2 0xFD0 JUMPI POP DUP8 TIMESTAMP EQ JUMPDEST ISZERO PUSH2 0xFEE JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE PUSH2 0x1015 JUMP JUMPDEST DUP7 DUP9 TIMESTAMP SUB DUP7 MUL DUP2 PUSH2 0xFFB JUMPI INVALID JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 SWAP1 SWAP2 DIV SWAP1 SWAP2 ADD SWAP1 SSTORE JUMPDEST PUSH2 0x107C JUMP JUMPDEST DUP7 ISZERO DUP1 ISZERO PUSH2 0x1027 JUMPI POP DUP8 DUP4 EQ JUMPDEST ISZERO PUSH2 0x1045 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE PUSH2 0x106C JUMP JUMPDEST DUP7 DUP9 DUP5 SUB DUP7 MUL DUP2 PUSH2 0x1052 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 SWAP1 SWAP2 DIV SWAP1 SWAP2 ADD SWAP1 SSTORE JUMPDEST SWAP2 SWAP7 POP DUP7 SWAP3 POP DUP3 SWAP2 PUSH1 0x1 ADD PUSH2 0xFAA JUMP JUMPDEST POP PUSH32 0x9B7F1A85A4C9B4E59E1B6527D9969C50CDFB3A1A467D0C4A51FB0ED8BF07F130 DUP11 DUP6 DUP10 PUSH1 0x40 MLOAD PUSH2 0x10B0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1C21 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x450 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x10E5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x16DF JUMP JUMPDEST PUSH2 0x34A DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x1570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x11B6 JUMPI SWAP1 POP PUSH2 0x465 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP8 AND DUP4 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1204 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND PUSH2 0x16BA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 PUSH2 0x121A TIMESTAMP PUSH2 0x169E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x122B JUMPI POP POP PUSH2 0x674 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xC2C4C5C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 JUMPDEST PUSH1 0x14 DUP2 LT ISZERO PUSH2 0x13A5 JUMPI DUP2 DUP4 GT ISZERO PUSH2 0x12C4 JUMPI PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBD85B03900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0xBD85B039 SWAP1 PUSH2 0x1336 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1362 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x1386 SWAP2 SWAP1 PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH3 0x93A80 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x12AE JUMP JUMPDEST POP POP PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x13DC DUP6 DUP6 PUSH2 0x1174 JUMP JUMPDEST DUP3 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1403 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x169E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP12 AND DUP4 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SWAP3 SWAP4 POP SWAP1 SWAP2 SWAP1 DUP1 JUMPDEST PUSH1 0x14 DUP2 LT ISZERO PUSH2 0x1494 JUMPI DUP5 DUP7 LT PUSH2 0x1455 JUMPI PUSH2 0x1494 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP7 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD SWAP3 DUP9 SWAP1 MSTORE SWAP3 KECCAK256 SLOAD MUL DUP2 PUSH2 0x147D JUMPI INVALID JUMPDEST PUSH3 0x93A80 SWAP8 SWAP1 SWAP8 ADD SWAP7 DIV SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1440 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP13 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP6 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1564 JUMPI DUP6 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP1 DUP4 DIV DUP3 AND DUP5 SWAP1 SUB DUP3 AND MUL SWAP2 AND OR DUP7 SSTORE PUSH2 0x1526 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP11 DUP4 PUSH2 0x178C JUMP JUMPDEST PUSH32 0xFF097C7D8B1957A4FF09EF1361B5FB54DCEDE3941BA836D0BEB9D10BEC725DE6 DUP10 DUP10 DUP4 DUP9 PUSH1 0x40 MLOAD PUSH2 0x155B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B81 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x34A JUMPI PUSH2 0x34A DUP2 PUSH2 0x17B0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP2 JUMPDEST PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1693 JUMPI DUP2 DUP4 LT PUSH2 0x1599 JUMPI PUSH2 0x1693 JUMP JUMPDEST PUSH1 0x2 DUP3 DUP5 ADD DUP2 ADD DIV PUSH2 0x15A9 PUSH2 0x1833 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x28D09D4700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x28D09D47 SWAP1 PUSH2 0x161D SWAP1 DUP13 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BB7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1635 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1649 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x166D SWAP2 SWAP1 PUSH2 0x1A57 JUMP JUMPDEST SWAP1 POP DUP8 DUP2 PUSH1 0x40 ADD MLOAD GT PUSH2 0x1682 JUMPI DUP2 SWAP5 POP PUSH2 0x1689 JUMP JUMPDEST PUSH1 0x1 DUP3 SUB SWAP4 POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1584 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH3 0x93A80 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x465 PUSH3 0x93A7F DUP4 ADD PUSH2 0x169E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x16CA JUMPI DUP2 PUSH2 0x462 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x462 DUP4 DUP4 PUSH1 0x1 PUSH2 0x181D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x1708 SWAP2 SWAP1 PUSH2 0x1AF6 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 0x1745 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 0x174A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x1762 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x450 DUP2 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x1784 JUMPI POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1784 SWAP2 SWAP1 PUSH2 0x1A37 JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x1570 JUMP JUMPDEST PUSH2 0x17AB DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x10E5 SWAP3 SWAP2 SWAP1 PUSH2 0x1BB7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x182C DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x1570 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1872 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1889 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0xF DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18CD JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5E2 DUP2 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x18EC JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x18F7 DUP2 PUSH2 0x1CEC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1912 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x191E DUP7 DUP3 DUP8 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x193D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1948 DUP2 PUSH2 0x1CEC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1958 DUP2 PUSH2 0x1CEC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1975 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1980 DUP2 PUSH2 0x1CEC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x19A0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x19B6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x19C2 DUP6 DUP3 DUP7 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x19E3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x19FA JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x1A06 DUP9 DUP4 DUP10 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1A1E JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x1A2B DUP8 DUP3 DUP9 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A48 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5E2 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A68 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1A87 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x1A94 DUP5 DUP5 PUSH2 0x18AA JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1AA3 DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x18AA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AD7 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AEF JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B16 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x1AFC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1B24 JUMPI DUP3 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 0x1C15 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1BF9 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6178696D756D20746F6B656E2062616C616E63652065786365656465640000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x46656520646973747269627574696F6E20686173206E6F742073746172746564 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x2079657400000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 PUSH6 0x4B64FD66C095 CALL CALLVALUE LOG1 0xED 0xE0 DUP10 SWAP11 JUMPDEST CALLVALUE PUSH8 0x940A75B869B0B230 SWAP16 PUSH29 0x20A379FE64736F6C634300070100330000000000000000000000000000 ", + "sourceMap": "1929:25619:55:-:0;;;3457:812;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2070:1:44;2175:7;:22;-1:-1:-1;;;;;;3526:28:55;;;;;;;3577:30;3597:9;3577:19;:30::i;:::-;3565:42;-1:-1:-1;3617:19:55;3639:36;3659:15;3639:19;:36::i;:::-;3617:58;;3706:11;3693:9;:24;;3685:69;;;;-1:-1:-1;;;3685:69:55;;;;;;;:::i;:::-;;;;;;;;;3781:11;3768:9;:24;3764:434;;;4101:37;;-1:-1:-1;;;4101:37:55;;4141:1;;-1:-1:-1;;;;;4101:24:55;;;;;:37;;4126:11;;4101:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;4093:94;;;;-1:-1:-1;;;4093:94:55;;;;;;;:::i;:::-;-1:-1:-1;4207:22:55;;;;4239:11;:23;-1:-1:-1;1929:25619:55;;27019:196;27190:7;27178:19;;;;27177:31;;27019:196::o;331:443:-1:-;;;485:2;473:9;464:7;460:23;456:32;453:2;;;-1:-1;;491:12;453:2;105:13;;-1:-1;;;;;3425:54;;3651:57;;3641:2;;-1:-1;;3712:12;3641:2;676;726:22;;;;268:13;543:96;;268:13;;-1:-1;;;447:327::o;781:263::-;;896:2;884:9;875:7;871:23;867:32;864:2;;;-1:-1;;902:12;864:2;-1:-1;268:13;;858:186;-1:-1;858:186::o;1898:416::-;2098:2;2112:47;;;2083:18;;;3077:19;1312:34;3117:14;;;1292:55;1366:12;;;2069:245::o;2321:416::-;2521:2;2535:47;;;1617:2;2506:18;;;3077:19;1653:34;3117:14;;;1633:55;-1:-1;;;1708:12;;;1701:32;1752:12;;;2492:245::o;2744:222::-;1849:37;;;2871:2;2856:18;;2842:124::o;:::-;1929:25619:55;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "7677": [ + { + "length": 32, + "start": 630 + }, + { + "length": 32, + "start": 1910 + }, + { + "length": 32, + "start": 2321 + }, + { + "length": 32, + "start": 2756 + }, + { + "length": 32, + "start": 4653 + }, + { + "length": 32, + "start": 4865 + }, + { + "length": 32, + "start": 5606 + } + ], + "7679": [ + { + "length": 32, + "start": 1211 + }, + { + "length": 32, + "start": 2132 + }, + { + "length": 32, + "start": 2468 + }, + { + "length": 32, + "start": 3362 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061011b5760003560e01c806382aa5ad4116100b2578063acbc142811610081578063ca31879d11610066578063ca31879d1461023b578063d3dc4ca11461024e578063de681faf146102615761011b565b8063acbc142814610220578063c2c4c5c1146102335761011b565b806382aa5ad4146101d2578063876e69a1146101da57806388720467146101ed578063905d10ac1461020d5761011b565b80633902b9bc116100ee5780633902b9bc146101865780634f3c5090146101995780637b8d6221146101ac5780638050a7ee146101bf5761011b565b806308b0308a1461012057806314866e081461013e5780632308805b14610153578063338b5dea14610173575b600080fd5b610128610274565b6040516101359190611b2f565b60405180910390f35b61015161014c3660046118bc565b610298565b005b6101666101613660046118bc565b6102b4565b6040516101359190611ce3565b610151610181366004611963565b610302565b6101516101943660046118bc565b61034e565b6101666101a7366004611ac6565b610361565b6101516101ba3660046119ce565b610373565b6101666101cd36600461192b565b610456565b61016661046b565b6101666101e83660046118bc565b610471565b6102006101fb3660046118d8565b6104af565b6040516101359190611bdd565b61015161021b36600461198e565b6105e9565b61016661022e3660046118bc565b61061e565b61015161065c565b61016661024936600461192b565b610676565b61016661025c366004611963565b6106b3565b61016661026f366004611963565b6106e8565b7f000000000000000000000000000000000000000000000000000000000000000090565b6102a061071d565b6102a981610736565b6102b1610c93565b50565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61030a61071d565b610315826000610c9a565b61033773ffffffffffffffffffffffffffffffffffffffff83163330846110c4565b610342826001610c9a565b61034a610c93565b5050565b61035661071d565b6102a9816001610c9a565b60009081526002602052604090205490565b61037b61071d565b6103858382611167565b8260005b81811015610446576103bc8686838181106103a057fe5b90506020020160208101906103b591906118bc565b6000610c9a565b61041333308686858181106103cd57fe5b905060200201358989868181106103e057fe5b90506020020160208101906103f591906118bc565b73ffffffffffffffffffffffffffffffffffffffff169291906110c4565b61043e86868381811061042257fe5b905060200201602081019061043791906118bc565b6001610c9a565b600101610389565b5050610450610c93565b50505050565b60006104628383611174565b90505b92915050565b60015490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205468010000000000000000900467ffffffffffffffff1690565b60606104b961071d565b7f0000000000000000000000000000000000000000000000000000000000000000421161051b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b60405180910390fd5b61052361120c565b61052c84610736565b8160608167ffffffffffffffff8111801561054657600080fd5b50604051908082528060200260200182016040528015610570578160200160208202803683370190505b50905060005b828110156105d65761058d8686838181106103a057fe5b6105b78787878481811061059d57fe5b90506020020160208101906105b291906118bc565b6113ac565b8282815181106105c357fe5b6020908102919091010152600101610576565b509150506105e2610c93565b9392505050565b6105f161071d565b8060005b818110156106145761060c84848381811061042257fe5b6001016105f5565b505061034a610c93565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205468010000000000000000900467ffffffffffffffff1690565b61066461071d565b61066c61120c565b610674610c93565b565b600061068061071d565b61068861120c565b610693826000610c9a565b61069c83610736565b60006106a884846113ac565b915050610465610c93565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460209081526040808320938352929052205490565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b61072f60026000541415610190611570565b6002600055565b6040517f010ae75700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063010ae757906107ab908590600401611b2f565b60206040518083038186803b1580156107c357600080fd5b505afa1580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb9190611ade565b90508061080857506102b1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600560205260408120805490916801000000000000000090910467ffffffffffffffff16908161088057610879857f00000000000000000000000000000000000000000000000000000000000000008661157e565b90506108c3565b6108894261169e565b82141561089957505050506102b1565b50815470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b806108cc575060015b6108d4611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d47906109489089908690600401611bb7565b60806040518083038186803b15801561096057600080fd5b505afa158015610974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109989190611a57565b905082610a0a576109d57f00000000000000000000000000000000000000000000000000000000000000006109d083604001516116aa565b6116ba565b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff821617855592505b610a12611833565b60005b6032811015610bf85742851115610a2b57610bf8565b82604001518510158015610a3f5750868411155b15610b535760018401935082915086841115610a875760405180608001604052806000600f0b81526020016000600f0b81526020016000815260200160008152509250610b4e565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d4790610afb908b908890600401611bb7565b60806040518083038186803b158015610b1357600080fd5b505afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190611a57565b92505b610bf0565b6000826040015186039050600081846020015102600f0b8460000151600f0b13610b7e576000610b8f565b81846020015102846000015103600f0b5b905080158015610b9e57508886115b15610bb557610bac426116aa565b96505050610bf8565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526006602090815260408083208a84529091529020555062093a80909401935b600101610a15565b505083546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290920167ffffffffffffffff90811670010000000000000000000000000000000002929092177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1668010000000000000000939092169290920217909155505050565b6001600055565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805490916801000000000000000090910467ffffffffffffffff169081610d7e57429150610cec4261169e565b83547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff919091161783557f00000000000000000000000000000000000000000000000000000000000000004211610d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b610dd0565b814203905083610dd0576000610d938361169e565b610d9c4261169e565b14905060006201518042610daf426116aa565b03109050818015610dbe575080155b15610dcd57505050505061034a565b50505b82547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff16021783556040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190610e62903090600401611b2f565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190611ade565b8454909150600090610eeb90839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166116d1565b905080610efc57505050505061034a565b6fffffffffffffffffffffffffffffffff821115610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c4f565b84546fffffffffffffffffffffffffffffffff8084167001000000000000000000000000000000000291161785556000610f7f8561169e565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260046020526040812091925090815b601481101561107c578362093a800192508242101561101a5786158015610fd057508742145b15610fee576000848152602083905260409020805486019055611015565b86884203860281610ffb57fe5b600086815260208590526040902080549290910490910190555b61107c565b8615801561102757508783145b1561104557600084815260208390526040902080548601905561106c565b8688840386028161105257fe5b600086815260208590526040902080549290910490910190555b9196508692508291600101610faa565b507f9b7f1a85a4c9b4e59e1b6527d9969c50cdfb3a1a467d0c4a51fb0ed8bf07f1308a85896040516110b093929190611c21565b60405180910390a150505050505050505050565b610450846323b872dd60e01b8585856040516024016110e593929190611b50565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116df565b61034a8183146067611570565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260076020908152604080832093851683529290529081205480156111b6579050610465565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260056020908152604080832054938716835260039091529020546112049167ffffffffffffffff90811691166116ba565b949350505050565b600154600061121a4261169e565b90508082111561122b575050610674565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c2c4c5c16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561129357600080fd5b505af11580156112a7573d6000803e3d6000fd5b5050505060005b60148110156113a557818311156112c4576113a5565b6040517fbd85b03900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063bd85b03990611336908690600401611ce3565b60206040518083038186803b15801561134e57600080fd5b505afa158015611362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113869190611ade565b60008481526002602052604090205562093a80909201916001016112ae565b5050600155565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120816113dc8585611174565b82549091506000906114039068010000000000000000900467ffffffffffffffff1661169e565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600460209081526040808320938b16835260069091528120929350909190805b60148110156114945784861061145557611494565b6000868152600260209081526040808320548683528184205492889052922054028161147d57fe5b62093a809790970196049190910190600101611440565b5073ffffffffffffffffffffffffffffffffffffffff808a166000908152600760209081526040808320938c1683529290522085905580156115645785546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216849003821602911617865561152673ffffffffffffffffffffffffffffffffffffffff89168a8361178c565b7fff097c7d8b1957a4ff09ef1361b5fb54dcede3941ba836d0beb9d10bec725de68989838860405161155b9493929190611b81565b60405180910390a15b98975050505050505050565b8161034a5761034a816117b0565b60008082815b60808110156116935781831061159957611693565b60028284018101046115a9611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d479061161d908c908690600401611bb7565b60806040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190611a57565b90508781604001511161168257819450611689565b6001820393505b5050600101611584565b509095945050505050565b62093a80908190040290565b600061046562093a7f830161169e565b6000818310156116ca5781610462565b5090919050565b60006104628383600161181d565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516117089190611af6565b6000604051808303816000865af19150503d8060008114611745576040519150601f19603f3d011682016040523d82523d6000602084013e61174a565b606091505b50915091506000821415611762573d6000803e3d6000fd5b6104508151600014806117845750818060200190518101906117849190611a37565b6101a2611570565b6117ab8363a9059cbb60e01b84846040516024016110e5929190611bb7565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600061182c8484111583611570565b5050900390565b60405180608001604052806000600f0b81526020016000600f0b815260200160008152602001600081525090565b60008083601f840112611872578182fd5b50813567ffffffffffffffff811115611889578182fd5b60208301915083602080830285010111156118a357600080fd5b9250929050565b8051600f81900b811461046557600080fd5b6000602082840312156118cd578081fd5b81356105e281611cec565b6000806000604084860312156118ec578182fd5b83356118f781611cec565b9250602084013567ffffffffffffffff811115611912578283fd5b61191e86828701611861565b9497909650939450505050565b6000806040838503121561193d578182fd5b823561194881611cec565b9150602083013561195881611cec565b809150509250929050565b60008060408385031215611975578182fd5b823561198081611cec565b946020939093013593505050565b600080602083850312156119a0578182fd5b823567ffffffffffffffff8111156119b6578283fd5b6119c285828601611861565b90969095509350505050565b600080600080604085870312156119e3578081fd5b843567ffffffffffffffff808211156119fa578283fd5b611a0688838901611861565b90965094506020870135915080821115611a1e578283fd5b50611a2b87828801611861565b95989497509550505050565b600060208284031215611a48578081fd5b815180151581146105e2578182fd5b600060808284031215611a68578081fd5b6040516080810181811067ffffffffffffffff82111715611a87578283fd5b604052611a9484846118aa565b8152611aa384602085016118aa565b602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215611ad7578081fd5b5035919050565b600060208284031215611aef578081fd5b5051919050565b60008251815b81811015611b165760208186018101518583015201611afc565b81811115611b245782828501525b509190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252601e908201527f4d6178696d756d20746f6b656e2062616c616e63652065786365656465640000604082015260600190565b60208082526024908201527f46656520646973747269627574696f6e20686173206e6f74207374617274656460408201527f2079657400000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff811681146102b157600080fdfea2646970667358221220f9654b64fd66c095f134a1ede0899a5b3467940a75b869b0b2309f7c20a379fe64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82AA5AD4 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xACBC1428 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xCA31879D GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xCA31879D EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0xD3DC4CA1 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0xDE681FAF EQ PUSH2 0x261 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xACBC1428 EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x233 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x82AA5AD4 EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x876E69A1 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0x88720467 EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0x905D10AC EQ PUSH2 0x20D JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x3902B9BC GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3902B9BC EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x4F3C5090 EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0x7B8D6221 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x8050A7EE EQ PUSH2 0x1BF JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x8B0308A EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x14866E08 EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x2308805B EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x338B5DEA EQ PUSH2 0x173 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128 PUSH2 0x274 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x151 PUSH2 0x14C CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x166 PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x2B4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x1CE3 JUMP JUMPDEST PUSH2 0x151 PUSH2 0x181 CALLDATASIZE PUSH1 0x4 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x302 JUMP JUMPDEST PUSH2 0x151 PUSH2 0x194 CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x34E JUMP JUMPDEST PUSH2 0x166 PUSH2 0x1A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AC6 JUMP JUMPDEST PUSH2 0x361 JUMP JUMPDEST PUSH2 0x151 PUSH2 0x1BA CALLDATASIZE PUSH1 0x4 PUSH2 0x19CE JUMP JUMPDEST PUSH2 0x373 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x1CD CALLDATASIZE PUSH1 0x4 PUSH2 0x192B JUMP JUMPDEST PUSH2 0x456 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x46B JUMP JUMPDEST PUSH2 0x166 PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x471 JUMP JUMPDEST PUSH2 0x200 PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0x18D8 JUMP JUMPDEST PUSH2 0x4AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x1BDD JUMP JUMPDEST PUSH2 0x151 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x198E JUMP JUMPDEST PUSH2 0x5E9 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x61E JUMP JUMPDEST PUSH2 0x151 PUSH2 0x65C JUMP JUMPDEST PUSH2 0x166 PUSH2 0x249 CALLDATASIZE PUSH1 0x4 PUSH2 0x192B JUMP JUMPDEST PUSH2 0x676 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x6B3 JUMP JUMPDEST PUSH2 0x166 PUSH2 0x26F CALLDATASIZE PUSH1 0x4 PUSH2 0x1963 JUMP JUMPDEST PUSH2 0x6E8 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x2A9 DUP2 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0xC93 JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x30A PUSH2 0x71D JUMP JUMPDEST PUSH2 0x315 DUP3 PUSH1 0x0 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x337 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x342 DUP3 PUSH1 0x1 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x34A PUSH2 0xC93 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x356 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x2A9 DUP2 PUSH1 0x1 PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x37B PUSH2 0x71D JUMP JUMPDEST PUSH2 0x385 DUP4 DUP3 PUSH2 0x1167 JUMP JUMPDEST DUP3 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x446 JUMPI PUSH2 0x3BC DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x3A0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3B5 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x413 CALLER ADDRESS DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x3CD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP10 DUP10 DUP7 DUP2 DUP2 LT PUSH2 0x3E0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3F5 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 SWAP1 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x43E DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x422 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x437 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH1 0x1 PUSH2 0xC9A JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x389 JUMP JUMPDEST POP POP PUSH2 0x450 PUSH2 0xC93 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x462 DUP4 DUP4 PUSH2 0x1174 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4B9 PUSH2 0x71D JUMP JUMPDEST PUSH32 0x0 TIMESTAMP GT PUSH2 0x51B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x512 SWAP1 PUSH2 0x1C86 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x523 PUSH2 0x120C JUMP JUMPDEST PUSH2 0x52C DUP5 PUSH2 0x736 JUMP JUMPDEST DUP2 PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x570 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 0x5D6 JUMPI PUSH2 0x58D DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x3A0 JUMPI INVALID JUMPDEST PUSH2 0x5B7 DUP8 DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x59D JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x5B2 SWAP2 SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH2 0x13AC JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x5C3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x576 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x5E2 PUSH2 0xC93 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5F1 PUSH2 0x71D JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x614 JUMPI PUSH2 0x60C DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x422 JUMPI INVALID JUMPDEST PUSH1 0x1 ADD PUSH2 0x5F5 JUMP JUMPDEST POP POP PUSH2 0x34A PUSH2 0xC93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x664 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x66C PUSH2 0x120C JUMP JUMPDEST PUSH2 0x674 PUSH2 0xC93 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x680 PUSH2 0x71D JUMP JUMPDEST PUSH2 0x688 PUSH2 0x120C JUMP JUMPDEST PUSH2 0x693 DUP3 PUSH1 0x0 PUSH2 0xC9A JUMP JUMPDEST PUSH2 0x69C DUP4 PUSH2 0x736 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A8 DUP5 DUP5 PUSH2 0x13AC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x465 PUSH2 0xC93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x72F PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x1570 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x10AE75700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x10AE757 SWAP1 PUSH2 0x7AB SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x7FB SWAP2 SWAP1 PUSH2 0x1ADE JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x808 JUMPI POP PUSH2 0x2B1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 PUSH9 0x10000000000000000 SWAP1 SWAP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH2 0x880 JUMPI PUSH2 0x879 DUP6 PUSH32 0x0 DUP7 PUSH2 0x157E JUMP JUMPDEST SWAP1 POP PUSH2 0x8C3 JUMP JUMPDEST PUSH2 0x889 TIMESTAMP PUSH2 0x169E JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x899 JUMPI POP POP POP POP PUSH2 0x2B1 JUMP JUMPDEST POP DUP2 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST DUP1 PUSH2 0x8CC JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x8D4 PUSH2 0x1833 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x28D09D4700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x28D09D47 SWAP1 PUSH2 0x948 SWAP1 DUP10 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BB7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x960 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x974 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x998 SWAP2 SWAP1 PUSH2 0x1A57 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0xA0A JUMPI PUSH2 0x9D5 PUSH32 0x0 PUSH2 0x9D0 DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x16BA JUMP JUMPDEST DUP5 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND OR DUP6 SSTORE SWAP3 POP JUMPDEST PUSH2 0xA12 PUSH2 0x1833 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x32 DUP2 LT ISZERO PUSH2 0xBF8 JUMPI TIMESTAMP DUP6 GT ISZERO PUSH2 0xA2B JUMPI PUSH2 0xBF8 JUMP JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD DUP6 LT ISZERO DUP1 ISZERO PUSH2 0xA3F JUMPI POP DUP7 DUP5 GT ISZERO JUMPDEST ISZERO PUSH2 0xB53 JUMPI PUSH1 0x1 DUP5 ADD SWAP4 POP DUP3 SWAP2 POP DUP7 DUP5 GT ISZERO PUSH2 0xA87 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP3 POP PUSH2 0xB4E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x28D09D4700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x28D09D47 SWAP1 PUSH2 0xAFB SWAP1 DUP12 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BB7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xB4B SWAP2 SWAP1 PUSH2 0x1A57 JUMP JUMPDEST SWAP3 POP JUMPDEST PUSH2 0xBF0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 ADD MLOAD DUP7 SUB SWAP1 POP PUSH1 0x0 DUP2 DUP5 PUSH1 0x20 ADD MLOAD MUL PUSH1 0xF SIGNEXTEND DUP5 PUSH1 0x0 ADD MLOAD PUSH1 0xF SIGNEXTEND SGT PUSH2 0xB7E JUMPI PUSH1 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP2 DUP5 PUSH1 0x20 ADD MLOAD MUL DUP5 PUSH1 0x0 ADD MLOAD SUB PUSH1 0xF SIGNEXTEND JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0xB9E JUMPI POP DUP9 DUP7 GT JUMPDEST ISZERO PUSH2 0xBB5 JUMPI PUSH2 0xBAC TIMESTAMP PUSH2 0x16AA JUMP JUMPDEST SWAP7 POP POP POP PUSH2 0xBF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE POP PUSH3 0x93A80 SWAP1 SWAP5 ADD SWAP4 JUMPDEST PUSH1 0x1 ADD PUSH2 0xA15 JUMP JUMPDEST POP POP DUP4 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 ADD PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 SWAP1 SWAP3 OR PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF AND PUSH9 0x10000000000000000 SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 MUL OR SWAP1 SWAP2 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 PUSH9 0x10000000000000000 SWAP1 SWAP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH2 0xD7E JUMPI TIMESTAMP SWAP2 POP PUSH2 0xCEC TIMESTAMP PUSH2 0x169E JUMP JUMPDEST DUP4 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR DUP4 SSTORE PUSH32 0x0 TIMESTAMP GT PUSH2 0xD79 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x512 SWAP1 PUSH2 0x1C86 JUMP JUMPDEST PUSH2 0xDD0 JUMP JUMPDEST DUP2 TIMESTAMP SUB SWAP1 POP DUP4 PUSH2 0xDD0 JUMPI PUSH1 0x0 PUSH2 0xD93 DUP4 PUSH2 0x169E JUMP JUMPDEST PUSH2 0xD9C TIMESTAMP PUSH2 0x169E JUMP JUMPDEST EQ SWAP1 POP PUSH1 0x0 PUSH3 0x15180 TIMESTAMP PUSH2 0xDAF TIMESTAMP PUSH2 0x16AA JUMP JUMPDEST SUB LT SWAP1 POP DUP2 DUP1 ISZERO PUSH2 0xDBE JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xDCD JUMPI POP POP POP POP POP PUSH2 0x34A JUMP JUMPDEST POP POP JUMPDEST DUP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF AND PUSH9 0x10000000000000000 TIMESTAMP PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR DUP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xE62 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xEB2 SWAP2 SWAP1 PUSH2 0x1ADE JUMP JUMPDEST DUP5 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xEEB SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x16D1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xEFC JUMPI POP POP POP POP POP PUSH2 0x34A JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x512 SWAP1 PUSH2 0x1C4F JUMP JUMPDEST DUP5 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR DUP6 SSTORE PUSH1 0x0 PUSH2 0xF7F DUP6 PUSH2 0x169E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP2 SWAP3 POP SWAP1 DUP2 JUMPDEST PUSH1 0x14 DUP2 LT ISZERO PUSH2 0x107C JUMPI DUP4 PUSH3 0x93A80 ADD SWAP3 POP DUP3 TIMESTAMP LT ISZERO PUSH2 0x101A JUMPI DUP7 ISZERO DUP1 ISZERO PUSH2 0xFD0 JUMPI POP DUP8 TIMESTAMP EQ JUMPDEST ISZERO PUSH2 0xFEE JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE PUSH2 0x1015 JUMP JUMPDEST DUP7 DUP9 TIMESTAMP SUB DUP7 MUL DUP2 PUSH2 0xFFB JUMPI INVALID JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 SWAP1 SWAP2 DIV SWAP1 SWAP2 ADD SWAP1 SSTORE JUMPDEST PUSH2 0x107C JUMP JUMPDEST DUP7 ISZERO DUP1 ISZERO PUSH2 0x1027 JUMPI POP DUP8 DUP4 EQ JUMPDEST ISZERO PUSH2 0x1045 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP4 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE PUSH2 0x106C JUMP JUMPDEST DUP7 DUP9 DUP5 SUB DUP7 MUL DUP2 PUSH2 0x1052 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP3 SWAP1 SWAP2 DIV SWAP1 SWAP2 ADD SWAP1 SSTORE JUMPDEST SWAP2 SWAP7 POP DUP7 SWAP3 POP DUP3 SWAP2 PUSH1 0x1 ADD PUSH2 0xFAA JUMP JUMPDEST POP PUSH32 0x9B7F1A85A4C9B4E59E1B6527D9969C50CDFB3A1A467D0C4A51FB0ED8BF07F130 DUP11 DUP6 DUP10 PUSH1 0x40 MLOAD PUSH2 0x10B0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1C21 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x450 DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x10E5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x16DF JUMP JUMPDEST PUSH2 0x34A DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x1570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x11B6 JUMPI SWAP1 POP PUSH2 0x465 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD SWAP4 DUP8 AND DUP4 MSTORE PUSH1 0x3 SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1204 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND PUSH2 0x16BA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 PUSH2 0x121A TIMESTAMP PUSH2 0x169E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x122B JUMPI POP POP PUSH2 0x674 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xC2C4C5C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 JUMPDEST PUSH1 0x14 DUP2 LT ISZERO PUSH2 0x13A5 JUMPI DUP2 DUP4 GT ISZERO PUSH2 0x12C4 JUMPI PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBD85B03900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0xBD85B039 SWAP1 PUSH2 0x1336 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1362 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x1386 SWAP2 SWAP1 PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH3 0x93A80 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x12AE JUMP JUMPDEST POP POP PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x13DC DUP6 DUP6 PUSH2 0x1174 JUMP JUMPDEST DUP3 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1403 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x169E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP12 AND DUP4 MSTORE PUSH1 0x6 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SWAP3 SWAP4 POP SWAP1 SWAP2 SWAP1 DUP1 JUMPDEST PUSH1 0x14 DUP2 LT ISZERO PUSH2 0x1494 JUMPI DUP5 DUP7 LT PUSH2 0x1455 JUMPI PUSH2 0x1494 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP7 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD SWAP3 DUP9 SWAP1 MSTORE SWAP3 KECCAK256 SLOAD MUL DUP2 PUSH2 0x147D JUMPI INVALID JUMPDEST PUSH3 0x93A80 SWAP8 SWAP1 SWAP8 ADD SWAP7 DIV SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1440 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP13 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP6 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x1564 JUMPI DUP6 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP1 DUP4 DIV DUP3 AND DUP5 SWAP1 SUB DUP3 AND MUL SWAP2 AND OR DUP7 SSTORE PUSH2 0x1526 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP11 DUP4 PUSH2 0x178C JUMP JUMPDEST PUSH32 0xFF097C7D8B1957A4FF09EF1361B5FB54DCEDE3941BA836D0BEB9D10BEC725DE6 DUP10 DUP10 DUP4 DUP9 PUSH1 0x40 MLOAD PUSH2 0x155B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B81 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x34A JUMPI PUSH2 0x34A DUP2 PUSH2 0x17B0 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP2 JUMPDEST PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1693 JUMPI DUP2 DUP4 LT PUSH2 0x1599 JUMPI PUSH2 0x1693 JUMP JUMPDEST PUSH1 0x2 DUP3 DUP5 ADD DUP2 ADD DIV PUSH2 0x15A9 PUSH2 0x1833 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x28D09D4700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x28D09D47 SWAP1 PUSH2 0x161D SWAP1 DUP13 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BB7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1635 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1649 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x166D SWAP2 SWAP1 PUSH2 0x1A57 JUMP JUMPDEST SWAP1 POP DUP8 DUP2 PUSH1 0x40 ADD MLOAD GT PUSH2 0x1682 JUMPI DUP2 SWAP5 POP PUSH2 0x1689 JUMP JUMPDEST PUSH1 0x1 DUP3 SUB SWAP4 POP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1584 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH3 0x93A80 SWAP1 DUP2 SWAP1 DIV MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x465 PUSH3 0x93A7F DUP4 ADD PUSH2 0x169E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x16CA JUMPI DUP2 PUSH2 0x462 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x462 DUP4 DUP4 PUSH1 0x1 PUSH2 0x181D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x1708 SWAP2 SWAP1 PUSH2 0x1AF6 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 0x1745 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 0x174A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x1762 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x450 DUP2 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0x1784 JUMPI POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1784 SWAP2 SWAP1 PUSH2 0x1A37 JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x1570 JUMP JUMPDEST PUSH2 0x17AB DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x10E5 SWAP3 SWAP2 SWAP1 PUSH2 0x1BB7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x182C DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x1570 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xF SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1872 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1889 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x18A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0xF DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18CD JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5E2 DUP2 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x18EC JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x18F7 DUP2 PUSH2 0x1CEC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1912 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x191E DUP7 DUP3 DUP8 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x193D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1948 DUP2 PUSH2 0x1CEC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1958 DUP2 PUSH2 0x1CEC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1975 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1980 DUP2 PUSH2 0x1CEC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x19A0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x19B6 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x19C2 DUP6 DUP3 DUP7 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x19E3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x19FA JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x1A06 DUP9 DUP4 DUP10 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1A1E JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x1A2B DUP8 DUP3 DUP9 ADD PUSH2 0x1861 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A48 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5E2 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A68 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1A87 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x1A94 DUP5 DUP5 PUSH2 0x18AA JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1AA3 DUP5 PUSH1 0x20 DUP6 ADD PUSH2 0x18AA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AD7 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AEF JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B16 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x1AFC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1B24 JUMPI DUP3 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 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 0x1C15 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1BF9 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1E SWAP1 DUP3 ADD MSTORE PUSH32 0x4D6178696D756D20746F6B656E2062616C616E63652065786365656465640000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x46656520646973747269627574696F6E20686173206E6F742073746172746564 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x2079657400000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 PUSH6 0x4B64FD66C095 CALL CALLVALUE LOG1 0xED 0xE0 DUP10 SWAP11 JUMPDEST CALLVALUE PUSH8 0x940A75B869B0B230 SWAP16 PUSH29 0x20A379FE64736F6C634300070100330000000000000000000000000000 ", + "sourceMap": "1929:25619:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4354:111;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9969:114;;;;;;:::i;:::-;;:::i;:::-;;7040:140;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8288:236::-;;;;;;:::i;:::-;;:::i;10603:116::-;;;;;;:::i;:::-;;:::i;6803:144::-;;;;;;:::i;:::-;;:::i;8887:463::-;;;;;;:::i;:::-;;:::i;5577:161::-;;;;;;:::i;:::-;;:::i;4585:101::-;;;:::i;4865:133::-;;;;;;:::i;:::-;;:::i;12569:697::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11055:246::-;;;;;;:::i;:::-;;:::i;5194:136::-;;;;;;:::i;:::-;;:::i;9590:94::-;;;:::i;11815:291::-;;;;;;:::i;:::-;;:::i;7471:166::-;;;;;;:::i;:::-;;:::i;6228:173::-;;;;;;:::i;:::-;;:::i;4354:111::-;4445:13;4354:111;:::o;9969:114::-;2613:20:44;:18;:20::i;:::-;10048:28:55::1;10071:4;10048:22;:28::i;:::-;2654:19:44::0;:17;:19::i;:::-;9969:114:55;:::o;7040:140::-;7141:18;;7115:7;7141:18;;;:11;:18;;;;;:32;;;;;;;7040:140::o;8288:236::-;2613:20:44;:18;:20::i;:::-;8381:30:55::1;8398:5;8405;8381:16;:30::i;:::-;8421:57;:22;::::0;::::1;8444:10;8464:4;8471:6:::0;8421:22:::1;:57::i;:::-;8488:29;8505:5;8512:4;8488:16;:29::i;:::-;2654:19:44::0;:17;:19::i;:::-;8288:236:55;;:::o;10603:116::-;2613:20:44;:18;:20::i;:::-;10683:29:55::1;10700:5;10707:4;10683:16;:29::i;6803:144::-:0;6889:7;6915:25;;;:14;:25;;;;;;;6803:144::o;8887:463::-;2613:20:44;:18;:20::i;:::-;9005:66:55::1;9041:6:::0;9056:7;9005:35:::1;:66::i;:::-;9099:6:::0;9082:14:::1;9122:222;9146:6;9142:1;:10;9122:222;;;9173:34;9190:6;;9197:1;9190:9;;;;;;;;;;;;;;;;;;;;:::i;:::-;9201:5;9173:16;:34::i;:::-;9221:65;9248:10;9268:4;9275:7;;9283:1;9275:10;;;;;;;;;;;;;9221:6;;9228:1;9221:9;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;::::0;:65;;:26:::1;:65::i;:::-;9300:33;9317:6;;9324:1;9317:9;;;;;;;;;;;;;;;;;;;;:::i;:::-;9328:4;9300:16;:33::i;:::-;9154:3;;9122:222;;;;2643:1:44;2654:19:::0;:17;:19::i;:::-;8887:463:55;;;;:::o;5577:161::-;5669:7;5695:36;5719:4;5725:5;5695:23;:36::i;:::-;5688:43;;5577:161;;;;;:::o;4585:101::-;4668:11;;4585:101;:::o;4865:133::-;4964:16;;4938:7;4964:16;;;:10;:16;;;;;:27;;;;;;;4865:133::o;12569:697::-;12702:16;2613:20:44;:18;:20::i;:::-;12834:10:55::1;12816:15;:28;12808:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;12895:24;:22;:24::i;:::-;12929:28;12952:4;12929:22;:28::i;:::-;12991:6:::0;13014:24:::1;12991:6:::0;13041:27:::1;::::0;::::1;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;13041:27:55::1;;13014:54;;13083:9;13078:157;13102:12;13098:1;:16;13078:157;;;13135:34;13152:6;;13159:1;13152:9;;;;;;13135:34;13196:28;13208:4;13214:6;;13221:1;13214:9;;;;;;;;;;;;;;;;;;;;:::i;:::-;13196:11;:28::i;:::-;13183:7;13191:1;13183:10;;;;;;;;;::::0;;::::1;::::0;;;;;:41;13116:3:::1;;13078:157;;;-1:-1:-1::0;13252:7:55;-1:-1:-1;;2654:19:44;:17;:19::i;:::-;12569:697:55;;;;;:::o;11055:246::-;2613:20:44;:18;:20::i;:::-;11171:6:55;11148:20:::1;11194:101;11218:12;11214:1;:16;11194:101;;;11251:33;11268:6;;11275:1;11268:9;;;;;;11251:33;11232:3;;11194:101;;;;2643:1:44;2654:19:::0;:17;:19::i;5194:136:55:-;5294:18;;5268:7;5294:18;;;:11;:18;;;;;:29;;;;;;;5194:136::o;9590:94::-;2613:20:44;:18;:20::i;:::-;9653:24:55::1;:22;:24::i;:::-;2654:19:44::0;:17;:19::i;:::-;9590:94:55:o;11815:291::-;11903:7;2613:20:44;:18;:20::i;:::-;11922:24:55::1;:22;:24::i;:::-;11956:30;11973:5;11980;11956:16;:30::i;:::-;11996:28;12019:4;11996:22;:28::i;:::-;12035:14;12052:24;12064:4;12070:5;12052:11;:24::i;:::-;12035:41:::0;-1:-1:-1;;2654:19:44;:17;:19::i;7471:166:55:-;7598:21;;;;;7572:7;7598:21;;;:14;:21;;;;;;;;:32;;;;;;;;;7471:166::o;6228:173::-;6354:29;;;;;6328:7;6354:29;;;:23;:29;;;;;;;;:40;;;;;;;;;6228:173::o;2686:271:44:-;2809:48;2113:1;2818:7;;:19;;8984:3:20;2809:8:44;:48::i;:::-;2113:1;2932:7;:18;2686:271::o;19955:4194:55:-;20043:36;;;;;20020:20;;20043:30;:13;:30;;;;:36;;20074:4;;20043:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20020:59;-1:-1:-1;20214:17:55;20210:30;;20233:7;;;20210:30;20280:16;;;20250:27;20280:16;;;:10;:16;;;;;20482:20;;20280:16;;20482:20;;;;;;;;20540:519;;20668:55;20692:4;20698:10;20710:12;20668:23;:55::i;:::-;20656:67;;20540:519;;;20772:36;20792:15;20772:19;:36::i;:::-;20758:10;:50;20754:178;;;20911:7;;;;;;20754:178;-1:-1:-1;21017:31:55;;;;;;;20540:519;21169:14;21165:58;;-1:-1:-1;21211:1:55;21165:58;21233:36;;:::i;:::-;21272:49;;;;;:32;:13;:32;;;;:49;;21305:4;;21311:9;;21272:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21233:88;-1:-1:-1;21596:15:55;21592:166;;21640:53;21649:10;21661:31;21679:9;:12;;;21661:17;:31::i;:::-;21640:8;:53::i;:::-;21707:40;;;;;;;;;;;-1:-1:-1;21592:166:55;21958:39;;:::i;:::-;22012:9;22007:1977;22031:2;22027:1;:6;22007:1977;;;22165:15;22152:10;:28;22148:72;;;22200:5;;22148:72;22252:9;:12;;;22238:10;:26;;:55;;;;;22281:12;22268:9;:25;;22238:55;22234:1740;;;22757:1;22744:14;;;;22791:9;22776:24;;22834:12;22822:9;:24;22818:222;;;22882:31;;;;;;;;22902:1;22882:31;;;;;;22905:1;22882:31;;;;;;22908:1;22882:31;;;;22911:1;22882:31;;;22870:43;;22818:222;;;22972:49;;;;;:32;:13;:32;;;;:49;;23005:4;;23011:9;;22972:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22960:61;;22818:222;22234:1740;;;23279:9;23311:12;:15;;;23298:10;:28;23279:48;;23345:19;23408:2;23387:12;:18;;;:23;23367:43;;:12;:17;;;:43;;;:142;;23508:1;23367:142;;;23482:2;23461:12;:18;;;:23;23441:12;:17;;;:43;23433:52;;23367:142;23345:164;-1:-1:-1;23606:16:55;;:44;;;;;23638:12;23626:9;:24;23606:44;23602:165;;;23687:34;23705:15;23687:17;:34::i;:::-;23674:47;;23743:5;;;;23602:165;23864:29;;;;;;;:23;:29;;;;;;;;:41;;;;;;;;:55;-1:-1:-1;23952:7:55;23938:21;;;;22234:1740;22035:3;;22007:1977;;;-1:-1:-1;;24036:55:55;;;;24077:13;;;;;24036:55;;;;;;;;;;24101:41;;;;;;;;;;;;;;;-1:-1:-1;;;19955:4194:55:o;2963:208:44:-;2070:1;3142:7;:22;2963:208::o;15235:4606:55:-;15338:18;;;15306:29;15338:18;;;:11;:18;;;;;15390:21;;15338:18;;15390:21;;;;;;;;15462:1820;;15717:15;15701:31;;15776:36;15796:15;15776:19;:36::i;:::-;15746:67;;;;;;;;;;;;15932:10;15914:15;:28;15906:77;;;;;;;;;;;;:::i;:::-;15462:1820;;;16058:13;16040:15;:31;16014:57;;16091:5;16086:1186;;16454:32;16549:34;16569:13;16549:19;:34::i;:::-;16489:36;16509:15;16489:19;:36::i;:::-;:94;16454:129;;16835:21;16914:6;16896:15;16859:34;16877:15;16859:17;:34::i;:::-;:52;:61;16835:85;;17161:27;:48;;;;;17193:16;17192:17;17161:48;17157:101;;;17233:7;;;;;;;17157:101;16086:1186;;;17292:47;;;;;17323:15;17292:47;;;;;;17373:30;;;;;-1:-1:-1;;17373:15:55;;;;;;:30;;17397:4;;17373:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17459:24;;17350:53;;-1:-1:-1;17413:26:55;;17442:42;;17350:53;;17459:24;;;;;17442:16;:42::i;:::-;17413:71;-1:-1:-1;17498:23:55;17494:36;;17523:7;;;;;;;17494:36;17563:17;17547:33;;;17539:76;;;;;;;;;;;;:::i;:::-;17625:48;;;;;;;;;;;;;:24;17703:34;17723:13;17703:19;:34::i;:::-;18042:21;;;17747:16;18042:21;;;:14;:21;;;;;17684:53;;-1:-1:-1;17747:16:55;;18073:1687;18097:2;18093:1;:6;18073:1687;;;18194:8;18205:7;18194:18;18183:29;;18248:8;18230:15;:26;18226:1338;;;18386:28;;:64;;;;;18437:13;18418:15;:32;18386:64;18382:431;;;18474:23;;;;;;;;;;;:45;;;;;;18382:431;;;18771:23;18729:13;18711:15;:31;18689:18;:54;18688:106;;;;;18637:23;;;;;;;;;;;:157;;18688:106;;;;18637:157;;;;;18382:431;18909:5;;18226:1338;19077:28;;:57;;;;;19121:13;19109:8;:25;19077:57;19073:477;;;19226:23;;;;;;;;;;;:45;;;;;;19073:477;;;19508:23;19466:13;19455:8;:24;19433:18;:47;19432:99;;;;;19381:23;;;;;;;;;;;:150;;19432:99;;;;19381:150;;;;;19073:477;19708:8;;-1:-1:-1;19708:8:55;;-1:-1:-1;19708:8:55;;18101:3;;18073:1687;;;;19775:59;19793:5;19800:18;19820:13;19775:59;;;;;;;;:::i;:::-;;;;;;;;15235:4606;;;;;;;;;;:::o;1220:250:45:-;1358:105;1386:5;1417:27;;;1446:4;1452:2;1456:5;1394:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1358:19;:105::i;920:131:34:-;998:46;1012:1;1007;:6;5002:3:20;998:8:34;:46::i;25393:507:55:-;25521:26;;;;25477:7;25521:26;;;:20;:26;;;;;;;;:33;;;;;;;;;;;;25568:18;;25564:45;;25595:14;-1:-1:-1;25588:21:55;;25564:45;25836:16;;;;;;;;:10;:16;;;;;;;;:26;25864:18;;;;;:11;:18;;;;;:28;25827:66;;25836:26;;;;;25864:28;25827:8;:66::i;:::-;25820:73;25393:507;-1:-1:-1;;;;25393:507:55:o;24261:922::-;24335:11;;24314:18;24376:36;24396:15;24376:19;:36::i;:::-;24356:56;;24520:9;24507:10;:22;24503:141;;;24627:7;;;;24503:141;24654:13;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24799:9;24794:270;24818:2;24814:1;:6;24794:270;;;24858:9;24845:10;:22;24841:33;;;24869:5;;24841:33;24918:37;;;;;:25;:13;:25;;;;:37;;24944:10;;24918:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24889:26;;;;:14;:26;;;;;:66;25046:7;25032:21;;;;24822:3;;24794:270;;;-1:-1:-1;;25152:11:55;:24;24261:922::o;13454:1643::-;13572:18;;;13521:7;13572:18;;;:11;:18;;;;;13521:7;13625:36;13649:4;13584:5;13625:23;:36::i;:::-;13824:21;;13600:61;;-1:-1:-1;13776:25:55;;13804:42;;13824:21;;;;;13804:19;:42::i;:::-;13908:21;;;;13856:49;13908:21;;;:14;:21;;;;;;;;14000:29;;;;;:23;:29;;;;;13776:70;;-1:-1:-1;13908:21:55;;14000:29;13856:49;14064:503;14088:2;14084:1;:6;14064:503;;;14331:17;14313:14;:35;14309:46;;14350:5;;14309:46;14487:30;;;;:14;:30;;;;;;;;;14429:38;;;;;;;14397:29;;;;;;;:70;14487:30;14396:121;;;;14549:7;14531:25;;;;;14396:121;14370:147;;;;;14092:3;;14064:503;;;-1:-1:-1;14675:26:55;;;;;;;;:20;:26;;;;;;;;:33;;;;;;;;;:50;;;14740:10;;14736:331;;14907:24;;;;;;;;;:33;;;14872:69;;;;;;;;14955:32;:18;;;14974:4;14934:6;14955:18;:32::i;:::-;15006:50;15020:4;15026:5;15033:6;15041:14;15006:50;;;;;;;;;:::i;:::-;;;;;;;;14736:331;15084:6;13454:1643;-1:-1:-1;;;;;;;;13454:1643:55:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;26016:878:55:-;26157:7;;26215:12;26157:7;26323:545;26347:3;26343:1;:7;26323:545;;;26382:3;26375;:10;26371:21;;26387:5;;26371:21;26590:1;26573:9;;;:13;;26572:19;26605:29;;:::i;:::-;26637:43;;;;;:32;:13;:32;;;;:43;;26670:4;;26676:3;;26637:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26605:75;;26707:9;26698:2;:5;;;:18;26694:164;;26742:3;26736:9;;26694:164;;;26842:1;26836:3;:7;26830:13;;26694:164;-1:-1:-1;;26352:3:55;;26323:545;;;-1:-1:-1;26884:3:55;;26016:878;-1:-1:-1;;;;;26016:878:55:o;27019:196::-;27190:7;27178:19;;;;27177:31;;27019:196::o;27334:212::-;27402:7;27495:44;27515:23;;;27495:19;:44::i;1740:105:36:-;1798:7;1829:1;1824;:6;;:14;;1837:1;1824:14;;;-1:-1:-1;1833:1:36;;1740:105;-1:-1:-1;1740:105:36:o;1404:121:46:-;1462:7;1488:30;1492:1;1495;4370::20;1488:3:46;:30::i;1810:914:45:-;2112:12;2126:23;2153:5;:10;;2164:4;2153:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2111:58;;;;2363:1;2354:7;2351:14;2348:2;;;2405:16;2402:1;2399;2384:38;2449:16;2446:1;2439:27;2348:2;2620:97;2629:10;:17;2650:1;2629:22;:56;;;;2666:10;2655:30;;;;;;;;;;;;:::i;:::-;10129:3:20;2620:8:45;:97::i;1000:214::-;1112:95;1140:5;1171:23;;;1196:2;1200:5;1148:58;;;;;;;;;:::i;1112:95::-;1000:214;;;:::o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14;1816:206:46;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:46;;;1816:206::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;168:367::-;;;313:3;306:4;298:6;294:17;290:27;280:2;;-1:-1;;321:12;280:2;-1:-1;351:20;;391:18;380:30;;377:2;;;-1:-1;;413:12;377:2;457:4;449:6;445:17;433:29;;508:3;457:4;;492:6;488:17;449:6;474:32;;471:41;468:2;;;525:1;;515:12;468:2;273:262;;;;;:::o;1223:132::-;1300:13;;15470:2;15459:21;;;17027:34;;17017:2;;17075:1;;17065:12;2483:241;;2587:2;2575:9;2566:7;2562:23;2558:32;2555:2;;;-1:-1;;2593:12;2555:2;85:6;72:20;97:33;124:5;97:33;:::i;2731:552::-;;;;2902:2;2890:9;2881:7;2877:23;2873:32;2870:2;;;-1:-1;;2908:12;2870:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2960:63;-1:-1;3088:2;3073:18;;3060:32;3112:18;3101:30;;3098:2;;;-1:-1;;3134:12;3098:2;3172:95;3259:7;3250:6;3239:9;3235:22;3172:95;:::i;:::-;2864:419;;3154:113;;-1:-1;3154:113;;-1:-1;;;;2864:419::o;3290:396::-;;;3426:2;3414:9;3405:7;3401:23;3397:32;3394:2;;;-1:-1;;3432:12;3394:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3484:63;-1:-1;3584:2;3638:22;;1138:20;1163:48;1138:20;1163:48;:::i;:::-;3592:78;;;;3388:298;;;;;:::o;3693:366::-;;;3814:2;3802:9;3793:7;3789:23;3785:32;3782:2;;;-1:-1;;3820:12;3782:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3872:63;3972:2;4011:22;;;;2272:20;;-1:-1;;;3776:283::o;4066:427::-;;;4220:2;4208:9;4199:7;4195:23;4191:32;4188:2;;;-1:-1;;4226:12;4188:2;4284:17;4271:31;4322:18;4314:6;4311:30;4308:2;;;-1:-1;;4344:12;4308:2;4382:95;4469:7;4460:6;4449:9;4445:22;4382:95;:::i;:::-;4364:113;;;;-1:-1;4182:311;-1:-1;;;;4182:311::o;4500:708::-;;;;;4706:2;4694:9;4685:7;4681:23;4677:32;4674:2;;;-1:-1;;4712:12;4674:2;4770:17;4757:31;4808:18;;4800:6;4797:30;4794:2;;;-1:-1;;4830:12;4794:2;4868:95;4955:7;4946:6;4935:9;4931:22;4868:95;:::i;:::-;4850:113;;-1:-1;4850:113;-1:-1;5028:2;5013:18;;5000:32;;-1:-1;5041:30;;;5038:2;;;-1:-1;;5074:12;5038:2;;5112:80;5184:7;5175:6;5164:9;5160:22;5112:80;:::i;:::-;4668:540;;;;-1:-1;5094:98;-1:-1;;;;4668:540::o;5215:257::-;;5327:2;5315:9;5306:7;5302:23;5298:32;5295:2;;;-1:-1;;5333:12;5295:2;1002:6;996:13;16778:5;15259:13;15252:21;16756:5;16753:32;16743:2;;-1:-1;;16789:12;6160:308;;6297:3;6285:9;6276:7;6272:23;6268:33;6265:2;;;-1:-1;;6304:12;6265:2;13837;13831:9;6297:3;13867:6;13863:17;13974:6;13962:10;13959:22;13938:18;13926:10;13923:34;13920:62;13917:2;;;-1:-1;;13985:12;13917:2;13837;14004:22;1655:59;1710:3;1686:22;1655:59;:::i;:::-;1637:16;1630:85;1810:59;1865:3;1777:2;1845:9;1841:22;1810:59;:::i;:::-;1777:2;1796:5;1792:16;1785:85;13837:2;1998:9;1994:22;2420:13;13837:2;1948:5;1944:16;1937:86;2083:2;2152:9;2148:22;2420:13;2083:2;2102:5;2098:16;2091:86;6356:96;;;;6259:209;;;;:::o;6475:241::-;;6579:2;6567:9;6558:7;6554:23;6550:32;6547:2;;;-1:-1;;6585:12;6547:2;-1:-1;2272:20;;6541:175;-1:-1;6541:175::o;6723:263::-;;6838:2;6826:9;6817:7;6813:23;6809:32;6806:2;;;-1:-1;;6844:12;6806:2;-1:-1;2420:13;;6800:186;-1:-1;6800:186::o;9678:271::-;;8184:5;14299:12;-1:-1;16369:101;16383:6;16380:1;16377:13;16369:101;;;8328:4;16450:11;;;;;16444:18;16431:11;;;16424:39;16398:10;16369:101;;;16485:6;16482:1;16479:13;16476:2;;;-1:-1;16541:6;16536:3;16532:16;16525:27;16476:2;-1:-1;8359:16;;;;;9812:137;-1:-1;;9812:137::o;9956:222::-;15565:42;15554:54;;;;7246:37;;10083:2;10068:18;;10054:124::o;10185:444::-;15565:42;15554:54;;;7246:37;;15554:54;;;;10532:2;10517:18;;7246:37;10615:2;10600:18;;9509:37;;;;10368:2;10353:18;;10339:290::o;10636:586::-;15565:42;15554:54;;;7246:37;;15554:54;;;;11042:2;11027:18;;8473:65;11125:2;11110:18;;9509:37;11208:2;11193:18;;9509:37;;;;10862:3;10847:19;;10833:389::o;11229:333::-;15565:42;15554:54;;;;7246:37;;11548:2;11533:18;;9509:37;11384:2;11369:18;;11355:207::o;11569:370::-;11746:2;11760:47;;;14299:12;;11731:18;;;14702:19;;;11569:370;;11746:2;14153:14;;;;14742;;;;11569:370;7734:260;7759:6;7756:1;7753:13;7734:260;;;7820:13;;9509:37;;14557:14;;;;7147;;;;7781:1;7774:9;7734:260;;;-1:-1;11813:116;;11717:222;-1:-1;;;;;;11717:222::o;11946:474::-;15565:42;15554:54;;;;8473:65;;12323:2;12308:18;;9509:37;;;;12406:2;12391:18;;9509:37;12144:2;12129:18;;12115:305::o;12700:416::-;12900:2;12914:47;;;8952:2;12885:18;;;14702:19;8988:32;14742:14;;;8968:53;9040:12;;;12871:245::o;13123:416::-;13323:2;13337:47;;;9291:2;13308:18;;;14702:19;9327:34;14742:14;;;9307:55;9396:6;9382:12;;;9375:28;9422:12;;;13294:245::o;13546:222::-;9509:37;;;13673:2;13658:18;;13644:124::o;16573:117::-;15565:42;16660:5;15554:54;16635:5;16632:35;16622:2;;16681:1;;16671:12" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "checkpointToken(address)": "3902b9bc", + "checkpointTokens(address[])": "905d10ac", + "checkpointUser(address)": "14866e08", + "claimToken(address,address)": "ca31879d", + "claimTokens(address,address[])": "88720467", + "depositToken(address,uint256)": "338b5dea", + "depositTokens(address[],uint256[])": "7b8d6221", + "getTimeCursor()": "82aa5ad4", + "getTokenLastBalance(address)": "2308805b", + "getTokenTimeCursor(address)": "acbc1428", + "getTokensDistributedInWeek(address,uint256)": "d3dc4ca1", + "getTotalSupplyAtTimestamp(uint256)": "4f3c5090", + "getUserBalanceAtTimestamp(address,uint256)": "de681faf", + "getUserTimeCursor(address)": "876e69a1", + "getUserTokenTimeCursor(address,address)": "8050a7ee", + "getVotingEscrow()": "08b0308a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVotingEscrow\",\"name\":\"votingEscrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lastCheckpointTimestamp\",\"type\":\"uint256\"}],\"name\":\"TokenCheckpointed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userTokenTimeCursor\",\"type\":\"uint256\"}],\"name\":\"TokensClaimed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"checkpointToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"checkpointTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"checkpointUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"claimToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"claimTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"depositTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenLastBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getTokensDistributedInWeek\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getTotalSupplyAtTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"getUserBalanceAtTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getUserTokenTimeCursor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotingEscrow\",\"outputs\":[{\"internalType\":\"contract IVotingEscrow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Supports distributing arbitrarily many different tokens. In order to start distributing a new token to veBAL holders simply transfer the tokens to the `FeeDistributor` contract and then call `checkpointToken`.\",\"kind\":\"dev\",\"methods\":{\"checkpointToken(address)\":{\"details\":\"Any `token` balance held by the FeeDistributor above that which is returned by `getTokenLastBalance` will be distributed evenly across the time period since `token` was last checkpointed. This function will be called automatically before claiming tokens to ensure the contract is properly updated.\",\"params\":{\"token\":\"- The ERC20 token address to be checkpointed.\"}},\"checkpointTokens(address[])\":{\"details\":\"A version of `checkpointToken` which supports checkpointing multiple tokens. See `checkpointToken` for more details.\",\"params\":{\"tokens\":\"- An array of ERC20 token addresses to be checkpointed.\"}},\"checkpointUser(address)\":{\"params\":{\"user\":\"- The address of the user to be checkpointed.\"}},\"claimToken(address,address)\":{\"details\":\"It's not necessary to explicitly checkpoint before calling this function, it will ensure the FeeDistributor is up to date before calculating the amount of tokens to be claimed.\",\"params\":{\"token\":\"- The ERC20 token address to be claimed.\",\"user\":\"- The user on behalf of which to claim.\"},\"returns\":{\"_0\":\"The amount of `token` sent to `user` as a result of claiming.\"}},\"claimTokens(address,address[])\":{\"details\":\"A version of `claimToken` which supports claiming multiple `tokens` on behalf of `user`. See `claimToken` for more details.\",\"params\":{\"tokens\":\"- An array of ERC20 token addresses to be claimed.\",\"user\":\"- The user on behalf of which to claim.\"},\"returns\":{\"_0\":\"An array of the amounts of each token in `tokens` sent to `user` as a result of claiming.\"}},\"depositToken(address,uint256)\":{\"details\":\"Sending tokens directly to the FeeDistributor instead of using `depositToken` may result in tokens being retroactively distributed to past weeks, or for the distribution to carry over to future weeks. If for some reason `depositToken` cannot be called, in order to ensure that all tokens are correctly distributed manually call `checkpointToken` before and after the token transfer.\",\"params\":{\"amount\":\"- The amount of tokens to deposit.\",\"token\":\"- The ERC20 token address to distribute.\"}},\"depositTokens(address[],uint256[])\":{\"details\":\"A version of `depositToken` which supports depositing multiple `tokens` at once. See `depositToken` for more details.\",\"params\":{\"amounts\":\"- An array of token amounts to deposit.\",\"tokens\":\"- An array of ERC20 token addresses to distribute.\"}},\"getTokenTimeCursor(address)\":{\"params\":{\"token\":\"- The ERC20 token address to query.\"}},\"getTokensDistributedInWeek(address,uint256)\":{\"params\":{\"timestamp\":\"- The timestamp corresponding to the beginning of the week of interest.\",\"token\":\"- The ERC20 token address to query.\"}},\"getTotalSupplyAtTimestamp(uint256)\":{\"details\":\"Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values. This function requires the contract to have been checkpointed past `timestamp` so that the supply is cached.\",\"params\":{\"timestamp\":\"- The timestamp at which to read the cached total supply at.\"}},\"getUserBalanceAtTimestamp(address,uint256)\":{\"details\":\"Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values. This function requires `user` to have been checkpointed past `timestamp` so that their balance is cached.\",\"params\":{\"timestamp\":\"- The timestamp at which to read the `user`'s cached balance at.\",\"user\":\"- The address of the user of which to read the cached balance of.\"}},\"getUserTimeCursor(address)\":{\"params\":{\"user\":\"- The address of the user to query.\"}},\"getUserTokenTimeCursor(address,address)\":{\"params\":{\"token\":\"- The ERC20 token address to query.\",\"user\":\"- The address of the user to query.\"}}},\"title\":\"Fee Distributor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"checkpoint()\":{\"notice\":\"Caches the total supply of veBAL at the beginning of each week. This function will be called automatically before claiming tokens to ensure the contract is properly updated.\"},\"checkpointToken(address)\":{\"notice\":\"Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\"},\"checkpointTokens(address[])\":{\"notice\":\"Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\"},\"checkpointUser(address)\":{\"notice\":\"Caches the user's balance of veBAL at the beginning of each week. This function will be called automatically before claiming tokens to ensure the contract is properly updated.\"},\"claimToken(address,address)\":{\"notice\":\"Claims all pending distributions of the provided token for a user.\"},\"claimTokens(address,address[])\":{\"notice\":\"Claims a number of tokens on behalf of a user.\"},\"depositToken(address,uint256)\":{\"notice\":\"Deposits tokens to be distributed in the current week.\"},\"depositTokens(address[],uint256[])\":{\"notice\":\"Deposits tokens to be distributed in the current week.\"},\"getTimeCursor()\":{\"notice\":\"Returns the global time cursor representing the most earliest uncheckpointed week.\"},\"getTokenLastBalance(address)\":{\"notice\":\"Returns the FeeDistributor's cached balance of `token`.\"},\"getTokenTimeCursor(address)\":{\"notice\":\"Returns the token-level time cursor storing the timestamp at up to which tokens have been distributed.\"},\"getTokensDistributedInWeek(address,uint256)\":{\"notice\":\"Returns the amount of `token` which the FeeDistributor received in the week beginning at `timestamp`.\"},\"getTotalSupplyAtTimestamp(uint256)\":{\"notice\":\"Returns the cached total supply of veBAL as of the provided timestamp.\"},\"getUserBalanceAtTimestamp(address,uint256)\":{\"notice\":\"Returns the user's cached balance of veBAL as of the provided timestamp.\"},\"getUserTimeCursor(address)\":{\"notice\":\"Returns the user-level time cursor representing the most earliest uncheckpointed week.\"},\"getUserTokenTimeCursor(address,address)\":{\"notice\":\"Returns the user-level time cursor storing the timestamp of the latest token distribution claimed.\"},\"getVotingEscrow()\":{\"notice\":\"Returns the VotingEscrow (veBAL) token contract\"}},\"notice\":\"Distributes any tokens transferred to the contract (e.g. Protocol fees and any BAL emissions) among veBAL holders proportionally based on a snapshot of the week at which the tokens are sent to the FeeDistributor contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/fee-distribution/FeeDistributor.sol\":\"FeeDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol\":{\"keccak256\":\"0xd9c89f4c25f122124f18c9ec2423b71b2abed7683f778b802fded5dedda9c43e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a4a3195c4e81dcbc14491bdf4c2db12fda7ac7a5814189212864dcdad7755cdb\",\"dweb:/ipfs/QmZT2mieRk8KTVju5438ip1emikpsgLx5yy4wfYeJduiBr\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\":{\"keccak256\":\"0x773d0bf95fd51f7042cf5e20d1424aae24218c358ad71676c29878f76d81e7f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86d0397ef1443257ad7a49306f3f2bdd490f4a238d4d416373031b8262d211ee\",\"dweb:/ipfs/QmUHBu6gWfnhLEjQ3FCcbha6zUVZVfPFaNJMvnz9h8Prvy\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/fee-distribution/FeeDistributor.sol\":{\"keccak256\":\"0x97a7ed3088717aebcff38e75f6d9ee62e5176840bef62034fbee00ece1c5a846\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cae6252cd3472fac73ddef9ec15db356f443d2bdcbb7c8d6dfac752133918dd2\",\"dweb:/ipfs/QmRJ89yts7tYe5Bgo9DbQDnabAzdyX8nqK4azETw6jgJG7\"]}},\"version\":1}" + } + }, + "contracts/fee-distribution/FeeDistributorBALClaimer.sol": { + "FeeDistributorBALClaimer": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "feeDistributor", + "type": "address" + }, + { + "internalType": "contract ISingleRecipientGauge", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IAuthorizerAdaptor", + "name": "authorizerAdaptor", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "distributeBAL", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizerAdaptor", + "outputs": [ + { + "internalType": "contract IAuthorizerAdaptor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBALTokenHolder", + "outputs": [ + { + "internalType": "contract IBALTokenHolder", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBalancerToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFeeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGauge", + "outputs": [ + { + "internalType": "contract ISingleRecipientGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "61012060405234801561001157600080fd5b50604051610a13380380610a1383398101604081905261003091610170565b6000826001600160a01b0316631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561006b57600080fd5b505afa15801561007f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a3919061014d565b9050806001600160a01b031663c00396996040518163ffffffff1660e01b815260040160206040518083038186803b1580156100de57600080fd5b505afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610116919061014d565b6001600160601b0319606091821b811660805292811b831660a05293841b821660c05291831b811660e052911b16610100526101d4565b60006020828403121561015e578081fd5b8151610169816101bc565b9392505050565b600080600060608486031215610184578182fd5b835161018f816101bc565b60208501519093506101a0816101bc565b60408501519092506101b1816101bc565b809150509250925092565b6001600160a01b03811681146101d157600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6107c16102526000398060c1528061023e52806102d7525080610154528061047952508061010952806101b5528061027a52806103ec52508061012d528061052e52508060e552806101e2528061029b528061041b52506107c16000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063e758d36b11610050578063e758d36b146100a5578063eeed85fa146100ad578063f2803f03146100b757610072565b80630a08832d14610077578063c003969914610095578063c89131731461009d575b600080fd5b61007f6100bf565b60405161008c91906106aa565b60405180910390f35b61007f6100e3565b61007f610107565b61007f61012b565b6100b561014f565b005b61007f610477565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6101787f000000000000000000000000000000000000000000000000000000000000000061049b565b6040517f3902b9bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633902b9bc9061020a907f0000000000000000000000000000000000000000000000000000000000000000906004016106aa565b600060405180830381600087803b15801561022457600080fd5b505af1158015610238573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c10753297f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161031291906106aa565b60206040518083038186803b15801561032a57600080fd5b505afa15801561033e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103629190610692565b6040518363ffffffff1660e01b815260040161037f929190610739565b600060405180830381600087803b15801561039957600080fd5b505af11580156103ad573d6000803e3d6000fd5b50506040517f3902b9bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250633902b9bc9150610443907f0000000000000000000000000000000000000000000000000000000000000000906004016106aa565b600060405180830381600087803b15801561045d57600080fd5b505af1158015610471573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc2c4c5c10000000000000000000000000000000000000000000000000000000017905291517f4036176a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692634036176a92610561928692016106cb565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d591908101906105d9565b5050565b6000602082840312156105ea578081fd5b815167ffffffffffffffff80821115610601578283fd5b818401915084601f830112610614578283fd5b815181811115610622578384fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715610660578586fd5b604052818152838201602001871015610677578485fd5b61068882602083016020870161075f565b9695505050505050565b6000602082840312156106a3578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8416825260406020830152825180604084015261070681606085016020870161075f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60005b8381101561077a578181015183820152602001610762565b83811115610471575050600091015256fea264697066735822122022ef52312e84e78a4f93dc70d3394474e7cd7e5604cf6c42c006a69e71b7327264736f6c63430007010033", + "opcodes": "PUSH2 0x120 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xA13 CODESIZE SUB DUP1 PUSH2 0xA13 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x30 SWAP2 PUSH2 0x170 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1B88094D 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xA3 SWAP2 SWAP1 PUSH2 0x14D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC0039699 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x116 SWAP2 SWAP1 PUSH2 0x14D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP3 DUP2 SHL DUP4 AND PUSH1 0xA0 MSTORE SWAP4 DUP5 SHL DUP3 AND PUSH1 0xC0 MSTORE SWAP2 DUP4 SHL DUP2 AND PUSH1 0xE0 MSTORE SWAP2 SHL AND PUSH2 0x100 MSTORE PUSH2 0x1D4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x15E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x169 DUP2 PUSH2 0x1BC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x184 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x18F DUP2 PUSH2 0x1BC JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x1A0 DUP2 PUSH2 0x1BC JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1B1 DUP2 PUSH2 0x1BC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x7C1 PUSH2 0x252 PUSH1 0x0 CODECOPY DUP1 PUSH1 0xC1 MSTORE DUP1 PUSH2 0x23E MSTORE DUP1 PUSH2 0x2D7 MSTORE POP DUP1 PUSH2 0x154 MSTORE DUP1 PUSH2 0x479 MSTORE POP DUP1 PUSH2 0x109 MSTORE DUP1 PUSH2 0x1B5 MSTORE DUP1 PUSH2 0x27A MSTORE DUP1 PUSH2 0x3EC MSTORE POP DUP1 PUSH2 0x12D MSTORE DUP1 PUSH2 0x52E MSTORE POP DUP1 PUSH1 0xE5 MSTORE DUP1 PUSH2 0x1E2 MSTORE DUP1 PUSH2 0x29B MSTORE DUP1 PUSH2 0x41B MSTORE POP PUSH2 0x7C1 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 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xE758D36B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xE758D36B EQ PUSH2 0xA5 JUMPI DUP1 PUSH4 0xEEED85FA EQ PUSH2 0xAD JUMPI DUP1 PUSH4 0xF2803F03 EQ PUSH2 0xB7 JUMPI PUSH2 0x72 JUMP JUMPDEST DUP1 PUSH4 0xA08832D EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xC0039699 EQ PUSH2 0x95 JUMPI DUP1 PUSH4 0xC8913173 EQ PUSH2 0x9D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0xBF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0xE3 JUMP JUMPDEST PUSH2 0x7F PUSH2 0x107 JUMP JUMPDEST PUSH2 0x7F PUSH2 0x12B JUMP JUMPDEST PUSH2 0xB5 PUSH2 0x14F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x477 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x178 PUSH32 0x0 PUSH2 0x49B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3902B9BC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x3902B9BC SWAP1 PUSH2 0x20A SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xC1075329 PUSH32 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x312 SWAP2 SWAP1 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x362 SWAP2 SWAP1 PUSH2 0x692 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x37F SWAP3 SWAP2 SWAP1 PUSH2 0x739 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x3902B9BC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 POP PUSH4 0x3902B9BC SWAP2 POP PUSH2 0x443 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x471 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0x24 DUP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC2C4C5C100000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP2 MLOAD PUSH32 0x4036176A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0x4036176A SWAP3 PUSH2 0x561 SWAP3 DUP7 SWAP3 ADD PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x57B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x58F 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 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x5D5 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5D9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x601 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x614 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x622 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x660 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP8 LT ISZERO PUSH2 0x677 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x688 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x75F JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A3 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE DUP3 MLOAD DUP1 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x706 DUP2 PUSH1 0x60 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x75F JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x60 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x77A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x762 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x471 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x22 0xEF MSTORE BALANCE 0x2E DUP5 0xE7 DUP11 0x4F SWAP4 0xDC PUSH17 0xD3394474E7CD7E5604CF6C42C006A69E71 0xB7 ORIGIN PUSH19 0x64736F6C634300070100330000000000000000 ", + "sourceMap": "1228:2676:56:-:0;;;1532:440;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1683:30;1732:5;-1:-1:-1;;;;;1732:18:56;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1683:70;;1776:14;-1:-1:-1;;;;;1776:31:56;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1764:45:56;;;;;;;;1819:38;;;;;;;1867:32;;;;;;;1909:14;;;;;;;1933:32;;;;;1228:2676;;908:263:-1;;1023:2;1011:9;1002:7;998:23;994:32;991:2;;;-1:-1;;1029:12;991:2;89:6;83:13;101:33;128:5;101:33;:::i;:::-;1081:74;985:186;-1:-1;;;985:186::o;1492:689::-;;;;1718:2;1706:9;1697:7;1693:23;1689:32;1686:2;;;-1:-1;;1724:12;1686:2;629:6;623:13;641:56;691:5;641:56;:::i;:::-;1910:2;1989:22;;816:13;1776:97;;-1:-1;834:62;816:13;834:62;:::i;:::-;2058:2;2133:22;;249:13;1918:103;;-1:-1;267:58;249:13;267:58;:::i;:::-;2066:99;;;;1680:501;;;;;:::o;2905:117::-;-1:-1;;;;;2839:54;;2964:35;;2954:2;;3013:1;;3003:12;2954:2;2948:74;:::o;:::-;1228:2676:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "9071": [ + { + "length": 32, + "start": 229 + }, + { + "length": 32, + "start": 482 + }, + { + "length": 32, + "start": 667 + }, + { + "length": 32, + "start": 1051 + } + ], + "9073": [ + { + "length": 32, + "start": 301 + }, + { + "length": 32, + "start": 1326 + } + ], + "9075": [ + { + "length": 32, + "start": 265 + }, + { + "length": 32, + "start": 437 + }, + { + "length": 32, + "start": 634 + }, + { + "length": 32, + "start": 1004 + } + ], + "9077": [ + { + "length": 32, + "start": 340 + }, + { + "length": 32, + "start": 1145 + } + ], + "9079": [ + { + "length": 32, + "start": 193 + }, + { + "length": 32, + "start": 574 + }, + { + "length": 32, + "start": 727 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100725760003560e01c8063e758d36b11610050578063e758d36b146100a5578063eeed85fa146100ad578063f2803f03146100b757610072565b80630a08832d14610077578063c003969914610095578063c89131731461009d575b600080fd5b61007f6100bf565b60405161008c91906106aa565b60405180910390f35b61007f6100e3565b61007f610107565b61007f61012b565b6100b561014f565b005b61007f610477565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6101787f000000000000000000000000000000000000000000000000000000000000000061049b565b6040517f3902b9bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633902b9bc9061020a907f0000000000000000000000000000000000000000000000000000000000000000906004016106aa565b600060405180830381600087803b15801561022457600080fd5b505af1158015610238573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c10753297f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161031291906106aa565b60206040518083038186803b15801561032a57600080fd5b505afa15801561033e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103629190610692565b6040518363ffffffff1660e01b815260040161037f929190610739565b600060405180830381600087803b15801561039957600080fd5b505af11580156103ad573d6000803e3d6000fd5b50506040517f3902b9bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250633902b9bc9150610443907f0000000000000000000000000000000000000000000000000000000000000000906004016106aa565b600060405180830381600087803b15801561045d57600080fd5b505af1158015610471573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc2c4c5c10000000000000000000000000000000000000000000000000000000017905291517f4036176a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692634036176a92610561928692016106cb565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d591908101906105d9565b5050565b6000602082840312156105ea578081fd5b815167ffffffffffffffff80821115610601578283fd5b818401915084601f830112610614578283fd5b815181811115610622578384fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715610660578586fd5b604052818152838201602001871015610677578485fd5b61068882602083016020870161075f565b9695505050505050565b6000602082840312156106a3578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8416825260406020830152825180604084015261070681606085016020870161075f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60005b8381101561077a578181015183820152602001610762565b83811115610471575050600091015256fea264697066735822122022ef52312e84e78a4f93dc70d3394474e7cd7e5604cf6c42c006a69e71b7327264736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xE758D36B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xE758D36B EQ PUSH2 0xA5 JUMPI DUP1 PUSH4 0xEEED85FA EQ PUSH2 0xAD JUMPI DUP1 PUSH4 0xF2803F03 EQ PUSH2 0xB7 JUMPI PUSH2 0x72 JUMP JUMPDEST DUP1 PUSH4 0xA08832D EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xC0039699 EQ PUSH2 0x95 JUMPI DUP1 PUSH4 0xC8913173 EQ PUSH2 0x9D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0xBF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8C SWAP2 SWAP1 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0xE3 JUMP JUMPDEST PUSH2 0x7F PUSH2 0x107 JUMP JUMPDEST PUSH2 0x7F PUSH2 0x12B JUMP JUMPDEST PUSH2 0xB5 PUSH2 0x14F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x477 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x178 PUSH32 0x0 PUSH2 0x49B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3902B9BC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH4 0x3902B9BC SWAP1 PUSH2 0x20A SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xC1075329 PUSH32 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x312 SWAP2 SWAP1 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x362 SWAP2 SWAP1 PUSH2 0x692 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x37F SWAP3 SWAP2 SWAP1 PUSH2 0x739 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x3902B9BC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 POP PUSH4 0x3902B9BC SWAP2 POP PUSH2 0x443 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x471 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP1 DUP3 MSTORE PUSH1 0x24 DUP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC2C4C5C100000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP2 MLOAD PUSH32 0x4036176A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP3 PUSH4 0x4036176A SWAP3 PUSH2 0x561 SWAP3 DUP7 SWAP3 ADD PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x57B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x58F 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 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x5D5 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5D9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x601 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x614 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x622 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP3 ADD ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x660 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP2 MSTORE DUP4 DUP3 ADD PUSH1 0x20 ADD DUP8 LT ISZERO PUSH2 0x677 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x688 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x75F JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A3 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE DUP3 MLOAD DUP1 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x706 DUP2 PUSH1 0x60 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x75F JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x60 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x77A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x762 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x471 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x22 0xEF MSTORE BALANCE 0x2E DUP5 0xE7 DUP11 0x4F SWAP4 0xDC PUSH17 0xD3394474E7CD7E5604CF6C42C006A69E71 0xB7 ORIGIN PUSH19 0x64736F6C634300070100330000000000000000 ", + "sourceMap": "1228:2676:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2861:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2061:92;;;:::i;2451:108::-;;;:::i;2245:117::-;;;:::i;3305:408::-;;;:::i;:::-;;2665:96;;;:::i;2861:108::-;2947:15;2861:108;:::o;2061:92::-;2137:9;2061:92;:::o;2451:108::-;2537:15;2451:108;:::o;2245:117::-;2337:18;2245:117;:::o;3305:408::-;3349:24;3366:6;3349:16;:24::i;:::-;3500:42;;;;;:31;:15;:31;;;;:42;;3532:9;;3500:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3552:15;:29;;;3590:15;3608:9;:19;;;3636:15;3608:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3552:102;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3664:42:56;;;;;:31;:15;:31;;-1:-1:-1;3664:31:56;;-1:-1:-1;3664:42:56;;3696:9;;3664:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3305:408::o;2665:96::-;2748:6;2665:96;:::o;3719:183::-;3835:59;;;;;;;;;;;;;;;;;;;3858:35;3835:59;;;3786:109;;;;;:32;:18;:32;;;;:109;;3827:5;;3786:109;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3719:183;:::o;597:360:-1:-;;721:2;709:9;700:7;696:23;692:32;689:2;;;-1:-1;;727:12;689:2;778:17;772:24;816:18;;808:6;805:30;802:2;;;-1:-1;;838:12;802:2;924:6;913:9;909:22;;;118:3;111:4;103:6;99:17;95:27;85:2;;-1:-1;;126:12;85:2;166:6;160:13;816:18;5489:6;5486:30;5483:2;;;-1:-1;;5519:12;5483:2;5153;5147:9;721:2;5592:9;111:4;5577:6;5573:17;5569:33;5183:6;5179:17;;5290:6;5278:10;5275:22;816:18;5242:10;5239:34;5236:62;5233:2;;;-1:-1;;5301:12;5233:2;5153;5320:22;258:21;;;358:16;;;721:2;358:16;355:25;-1:-1;352:2;;;-1:-1;;383:12;352:2;403:39;435:6;721:2;334:5;330:16;721:2;300:6;296:17;403:39;:::i;:::-;858:83;683:274;-1:-1;;;;;;683:274::o;964:263::-;;1079:2;1067:9;1058:7;1054:23;1050:32;1047:2;;;-1:-1;;1085:12;1047:2;-1:-1;534:13;;1041:186;-1:-1;1041:186::o;2721:222::-;6152:42;6141:54;;;;1305:37;;2848:2;2833:18;;2819:124::o;2950:417::-;;6152:42;6061:5;6141:54;1312:3;1305:37;3123:2;3241;3230:9;3226:18;3219:48;1496:5;5769:12;5925:6;3123:2;3112:9;3108:18;5913:19;1589:52;1634:6;5953:14;3112:9;5953:14;3241:2;1615:5;1611:16;1589:52;:::i;:::-;8214:2;8194:14;8210:7;8190:28;1653:39;;;;5953:14;1653:39;;3094:273;-1:-1;;;3094:273::o;3374:333::-;6152:42;6141:54;;;;1305:37;;3693:2;3678:18;;2672:37;3529:2;3514:18;;3500:207::o;7850:268::-;7915:1;7922:101;7936:6;7933:1;7930:13;7922:101;;;8003:11;;;7997:18;7984:11;;;7977:39;7958:2;7951:10;7922:101;;;8038:6;8035:1;8032:13;8029:2;;;-1:-1;;7915:1;8085:16;;8078:27;7899:219::o" + }, + "methodIdentifiers": { + "distributeBAL()": "eeed85fa", + "getAuthorizerAdaptor()": "e758d36b", + "getBALTokenHolder()": "0a08832d", + "getBalancerToken()": "c0039699", + "getFeeDistributor()": "c8913173", + "getGauge()": "f2803f03" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IFeeDistributor\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"contract ISingleRecipientGauge\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"authorizerAdaptor\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"distributeBAL\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizerAdaptor\",\"outputs\":[{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBALTokenHolder\",\"outputs\":[{\"internalType\":\"contract IBALTokenHolder\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeDistributor\",\"outputs\":[{\"internalType\":\"contract IFeeDistributor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGauge\",\"outputs\":[{\"internalType\":\"contract ISingleRecipientGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"distributeBAL()\":{\"details\":\"In order to call this function the `FeeDistributorBALClaimer` must be authorized to: - Withdraw BAL from the linked BALTokenHolder - Checkpoint the associated SingleRecipientGauge in order to mint BAL.\"}},\"title\":\"FeeDistributorBALClaimer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"distributeBAL()\":{\"notice\":\"Mint any outstanding BAL emissions and send them to the FeeDistributor\"},\"getAuthorizerAdaptor()\":{\"notice\":\"Returns the address of the AuthorizerAdaptor contract.\"},\"getBALTokenHolder()\":{\"notice\":\"Returns the address of the associated BALTokenHolder contract.\"},\"getBalancerToken()\":{\"notice\":\"Returns the address of the Balancer token contract.\"},\"getFeeDistributor()\":{\"notice\":\"Returns the address of the FeeDistributor contract.\"},\"getGauge()\":{\"notice\":\"Returns the address of the associated SingleRecipientGauge contract.\"}},\"notice\":\"Atomically mints any outstanding BAL from a SingleRecipientGauge and transfers it to the FeeDistributor in order for it to be distributed among veBAL holders.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/fee-distribution/FeeDistributorBALClaimer.sol\":\"FeeDistributorBALClaimer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol\":{\"keccak256\":\"0xd9c89f4c25f122124f18c9ec2423b71b2abed7683f778b802fded5dedda9c43e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a4a3195c4e81dcbc14491bdf4c2db12fda7ac7a5814189212864dcdad7755cdb\",\"dweb:/ipfs/QmZT2mieRk8KTVju5438ip1emikpsgLx5yy4wfYeJduiBr\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol\":{\"keccak256\":\"0x9eed89e06c4b50cf826aa9d628457744891ed6bdee2bc3b5b3d2c31812668958\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://57c02ebc0e2c2888af1790259e8c8389210ab937635a62ba1119cb2caef6acbb\",\"dweb:/ipfs/QmbonPRDmmEXXTw6zWi64rAQYMmegDiEB9tfvDNfuz5Kce\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"contracts/fee-distribution/FeeDistributorBALClaimer.sol\":{\"keccak256\":\"0x975c9afee256372b06acd41bbe1d836be96d61c9dde6eb116c99fbc01e3e4193\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83c9c1a9c1a574a91f88c707606893df8527d90df2ea0e1c6516dba69893fa7f\",\"dweb:/ipfs/QmUDftaQKYYus6qCCyYJiLeHe4WHv5R8rsAGUWv9HnkuLb\"]}},\"version\":1}" + } + }, + "contracts/gauges/ChildChainLiquidityGaugeFactory.sol": { + "ChildChainLiquidityGaugeFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "gauge", + "type": "address" + }, + { + "internalType": "contract IChildChainStreamer", + "name": "childChainStreamer", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "streamer", + "type": "address" + } + ], + "name": "RewardsOnlyGaugeCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getChildChainStreamerImplementation", + "outputs": [ + { + "internalType": "contract IChildChainStreamer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeImplementation", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugePool", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugeStreamer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolStreamer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "streamer", + "type": "address" + } + ], + "name": "isStreamerFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60c060405234801561001057600080fd5b5060405161088338038061088383398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c6107b26100d1600039806102e3528061057e52508061016252806102b652506107b26000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ed9331811610076578063cbda93271161005b578063cbda932714610125578063ce3cc8bd14610145578063f9e0a13e14610158576100a3565b80639ed93318146100ff578063a8ea687514610112576100a3565b806339312dee146100a8578063744a65dd146100c65780638a4ffeb0146100d957806390b20087146100ec575b600080fd5b6100b0610160565b6040516100bd919061068c565b60405180910390f35b6100b06100d436600461064d565b610184565b6100b06100e736600461064d565b61020c565b6100b06100fa36600461064d565b61021a565b6100b061010d36600461064d565b610245565b6100b061012036600461064d565b6104fb565b61013861013336600461064d565b610526565b6040516100bd91906106de565b61013861015336600461064d565b610551565b6100b061057c565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b815260040160206040518083038186803b1580156101cc57600080fd5b505afa1580156101e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102049190610670565b90505b919050565b60006102046100fa836104fb565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600360205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff818116600090815260026020526040812054909116156102af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a6906106e9565b60405180910390fd5b60006102da7f00000000000000000000000000000000000000000000000000000000000000006105a0565b905060006103077f00000000000000000000000000000000000000000000000000000000000000006105a0565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de89061035c90859060040161068c565b600060405180830381600087803b15801561037657600080fd5b505af115801561038a573d6000803e3d6000fd5b50506040517f6133f98500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169250636133f98591506103e89087908590631afe22a6906004016106ad565b600060405180830381600087803b15801561040257600080fd5b505af1158015610416573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff82811660008181526020818152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558885168084526002835281842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116871790915585855260039093529281902080549587169590921694909417905591517f887aaf82b8cf747396674afdce22a170d9e18895da73bbe1a63055fdfc8dd6b5906104ec90859061068c565b60405180910390a35092915050565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116610207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a690610720565b60006020828403121561065e578081fd5b813561066981610757565b9392505050565b600060208284031215610681578081fd5b815161066981610757565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461077957600080fd5b5056fea2646970667358221220007b72a1604a4989007c100283b9c886c17376d3992597005bfb80504db93a2664736f6c63430007010033", + "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x883 CODESIZE SUB DUP1 PUSH2 0x883 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x4D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH2 0x9E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5F JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x6A DUP2 PUSH2 0x86 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x7B DUP2 PUSH2 0x86 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x7B2 PUSH2 0xD1 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x2E3 MSTORE DUP1 PUSH2 0x57E MSTORE POP DUP1 PUSH2 0x162 MSTORE DUP1 PUSH2 0x2B6 MSTORE POP PUSH2 0x7B2 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 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9ED93318 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xCBDA9327 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCBDA9327 EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x145 JUMPI DUP1 PUSH4 0xF9E0A13E EQ PUSH2 0x158 JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x9ED93318 EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x112 JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x744A65DD EQ PUSH2 0xC6 JUMPI DUP1 PUSH4 0x8A4FFEB0 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x90B20087 EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0 PUSH2 0x160 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x68C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH2 0xD4 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0xE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x20C JUMP JUMPDEST PUSH2 0xB0 PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x21A JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x120 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x4FB JUMP JUMPDEST PUSH2 0x138 PUSH2 0x133 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x526 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x6DE JUMP JUMPDEST PUSH2 0x138 PUSH2 0x153 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x551 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x57C JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x82C63066 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x204 SWAP2 SWAP1 PUSH2 0x670 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x204 PUSH2 0xFA DUP4 PUSH2 0x4FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x2AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DA PUSH32 0x0 PUSH2 0x5A0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x307 PUSH32 0x0 PUSH2 0x5A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x35C SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x68C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x6133F98500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP3 POP PUSH4 0x6133F985 SWAP2 POP PUSH2 0x3E8 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH4 0x1AFE22A6 SWAP1 PUSH1 0x4 ADD PUSH2 0x6AD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x416 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP9 DUP6 AND DUP1 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND DUP8 OR SWAP1 SWAP2 SSTORE DUP6 DUP6 MSTORE PUSH1 0x3 SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP6 DUP8 AND SWAP6 SWAP1 SWAP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE SWAP2 MLOAD PUSH32 0x887AAF82B8CF747396674AFDCE22A170D9E18895DA73BBE1A63055FDFC8DD6B5 SWAP1 PUSH2 0x4EC SWAP1 DUP6 SWAP1 PUSH2 0x68C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x207 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x720 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x669 DUP2 PUSH2 0x757 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x681 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x669 DUP2 PUSH2 0x757 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x779 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP PUSH28 0x72A1604A4989007C100283B9C886C17376D3992597005BFB80504DB9 GASPRICE 0x26 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1081:4020:57:-:0;;;1810:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1895:28:57;;;;;;;;1933:54;;;;;1081:4020;;387:499:-1;;;569:2;557:9;548:7;544:23;540:32;537:2;;;-1:-1;;575:12;537:2;307:6;301:13;319:56;369:5;319:56;:::i;:::-;761:2;838:22;;110:13;627:97;;-1:-1;128:60;110:13;128:60;:::i;:::-;769:101;;;;531:355;;;;;:::o;1365:171::-;-1:-1;;;;;1299:54;;1451:62;;1441:2;;1527:1;;1517:12;1441:2;1435:101;:::o;:::-;1081:4020:57;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "9244": [ + { + "length": 32, + "start": 354 + }, + { + "length": 32, + "start": 694 + } + ], + "9246": [ + { + "length": 32, + "start": 739 + }, + { + "length": 32, + "start": 1406 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ed9331811610076578063cbda93271161005b578063cbda932714610125578063ce3cc8bd14610145578063f9e0a13e14610158576100a3565b80639ed93318146100ff578063a8ea687514610112576100a3565b806339312dee146100a8578063744a65dd146100c65780638a4ffeb0146100d957806390b20087146100ec575b600080fd5b6100b0610160565b6040516100bd919061068c565b60405180910390f35b6100b06100d436600461064d565b610184565b6100b06100e736600461064d565b61020c565b6100b06100fa36600461064d565b61021a565b6100b061010d36600461064d565b610245565b6100b061012036600461064d565b6104fb565b61013861013336600461064d565b610526565b6040516100bd91906106de565b61013861015336600461064d565b610551565b6100b061057c565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008173ffffffffffffffffffffffffffffffffffffffff166382c630666040518163ffffffff1660e01b815260040160206040518083038186803b1580156101cc57600080fd5b505afa1580156101e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102049190610670565b90505b919050565b60006102046100fa836104fb565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600360205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff818116600090815260026020526040812054909116156102af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a6906106e9565b60405180910390fd5b60006102da7f00000000000000000000000000000000000000000000000000000000000000006105a0565b905060006103077f00000000000000000000000000000000000000000000000000000000000000006105a0565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de89061035c90859060040161068c565b600060405180830381600087803b15801561037657600080fd5b505af115801561038a573d6000803e3d6000fd5b50506040517f6133f98500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169250636133f98591506103e89087908590631afe22a6906004016106ad565b600060405180830381600087803b15801561040257600080fd5b505af1158015610416573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff82811660008181526020818152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558885168084526002835281842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116871790915585855260039093529281902080549587169590921694909417905591517f887aaf82b8cf747396674afdce22a170d9e18895da73bbe1a63055fdfc8dd6b5906104ec90859061068c565b60405180910390a35092915050565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116610207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a690610720565b60006020828403121561065e578081fd5b813561066981610757565b9392505050565b600060208284031215610681578081fd5b815161066981610757565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461077957600080fd5b5056fea2646970667358221220007b72a1604a4989007c100283b9c886c17376d3992597005bfb80504db93a2664736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9ED93318 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xCBDA9327 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCBDA9327 EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x145 JUMPI DUP1 PUSH4 0xF9E0A13E EQ PUSH2 0x158 JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x9ED93318 EQ PUSH2 0xFF JUMPI DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x112 JUMPI PUSH2 0xA3 JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x744A65DD EQ PUSH2 0xC6 JUMPI DUP1 PUSH4 0x8A4FFEB0 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x90B20087 EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0 PUSH2 0x160 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x68C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH2 0xD4 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0xE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x20C JUMP JUMPDEST PUSH2 0xB0 PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x21A JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x10D CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x120 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x4FB JUMP JUMPDEST PUSH2 0x138 PUSH2 0x133 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x526 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x6DE JUMP JUMPDEST PUSH2 0x138 PUSH2 0x153 CALLDATASIZE PUSH1 0x4 PUSH2 0x64D JUMP JUMPDEST PUSH2 0x551 JUMP JUMPDEST PUSH2 0xB0 PUSH2 0x57C JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x82C63066 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x204 SWAP2 SWAP1 PUSH2 0x670 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x204 PUSH2 0xFA DUP4 PUSH2 0x4FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x2AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DA PUSH32 0x0 PUSH2 0x5A0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x307 PUSH32 0x0 PUSH2 0x5A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x35C SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x68C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x6133F98500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP3 POP PUSH4 0x6133F985 SWAP2 POP PUSH2 0x3E8 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH4 0x1AFE22A6 SWAP1 PUSH1 0x4 ADD PUSH2 0x6AD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x416 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP9 DUP6 AND DUP1 DUP5 MSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND DUP8 OR SWAP1 SWAP2 SSTORE DUP6 DUP6 MSTORE PUSH1 0x3 SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP6 DUP8 AND SWAP6 SWAP1 SWAP3 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE SWAP2 MLOAD PUSH32 0x887AAF82B8CF747396674AFDCE22A170D9E18895DA73BBE1A63055FDFC8DD6B5 SWAP1 PUSH2 0x4EC SWAP1 DUP6 SWAP1 PUSH2 0x68C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x207 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2A6 SWAP1 PUSH2 0x720 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x669 DUP2 PUSH2 0x757 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x681 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x669 DUP2 PUSH2 0x757 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x779 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP PUSH28 0x72A1604A4989007C100283B9C886C17376D3992597005BFB80504DB9 GASPRICE 0x26 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1081:4020:57:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2101:127;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3495:136;;;;;;:::i;:::-;;:::i;3733:149::-;;;;;;:::i;:::-;;:::i;3042:125::-;;;;;;:::i;:::-;;:::i;4463:636::-;;;;;;:::i;:::-;;:::i;2586:140::-;;;;;;:::i;:::-;;:::i;3260:143::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2816:131::-;;;;;;:::i;:::-;;:::i;2338:157::-;;;:::i;2101:127::-;2201:20;2101:127;:::o;3495:136::-;3564:6;3607:5;3589:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3582:42;;3495:136;;;;:::o;3733:149::-;3804:7;3830:45;3855:18;3868:4;3855:12;:18::i;3042:125::-;3139:21;;;;3113:7;3139:21;;;:14;:21;;;;;;;;3042:125::o;4463:636::-;4547:30;:16;;;4520:7;4547:16;;;:10;:16;;;;;;4520:7;;4547:16;:30;4539:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4613:13;4629:43;4650:20;4629:12;:43::i;:::-;4613:59;;4682:16;4701:56;4722:33;4701:12;:56::i;:::-;4768:47;;;;;4682:75;;-1:-1:-1;4768:40:57;;;;;;:47;;4809:5;;4768:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4825:63:57;;;;;:35;;;;-1:-1:-1;4825:35:57;;-1:-1:-1;4825:63:57;;4861:4;;4867:8;;1400:37;;4825:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4899:26:57;;;;:19;:26;;;;;;;;;;;:33;;;;4928:4;4899:33;;;4942:16;;;;;;:10;:16;;;;;:24;;;;;;;;;;;4976:21;;;:14;:21;;;;;;;:32;;;;;;;;;;;;;;;5023:46;;;;;;4976:32;;5023:46;:::i;:::-;;;;;;;;-1:-1:-1;5087:5:57;4463:636;-1:-1:-1;;4463:636:57:o;2586:140::-;2702:16;;;;2652:15;2702:16;;;:10;:16;;;;;;;;2586:140::o;3260:143::-;3364:32;;3341:4;3364:32;;;:22;:32;;;;;;;;;3260:143::o;2816:131::-;2914:26;;2891:4;2914:26;;;;;;;;;;;;;;2816:131::o;2338:157::-;2455:33;2338:157;:::o;1001:515:38:-;1058:16;1126:4;1120:11;1156:66;1151:3;1144:79;1269:14;1263:4;1259:25;1252:4;1247:3;1243:14;1236:49;1321:66;1314:4;1309:3;1305:14;1298:90;1428:4;1423:3;1420:1;1413:20;1401:32;-1:-1:-1;;1460:22:38;;;1452:57;;;;;;;;;;;;:::i;313:241:-1:-;;417:2;405:9;396:7;392:23;388:32;385:2;;;-1:-1;;423:12;385:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;475:63;379:175;-1:-1;;;379:175::o;561:293::-;;691:2;679:9;670:7;666:23;662:32;659:2;;;-1:-1;;697:12;659:2;241:6;235:13;253:48;295:5;253:48;:::i;2401:222::-;5588:42;5577:54;;;;932:37;;2528:2;2513:18;;2499:124::o;2630:444::-;5588:42;5577:54;;;932:37;;5577:54;;;;2977:2;2962:18;;932:37;3060:2;3045:18;;1163:37;;;;2813:2;2798:18;;2784:290::o;3081:210::-;5297:13;;5290:21;1046:34;;3202:2;3187:18;;3173:118::o;4115:416::-;4315:2;4329:47;;;1966:2;4300:18;;;5065:19;2002:22;5105:14;;;1982:43;2044:12;;;4286:245::o;4538:416::-;4738:2;4752:47;;;2295:2;4723:18;;;5065:19;2331:24;5105:14;;;2311:45;2375:12;;;4709:245::o;6567:117::-;5588:42;6654:5;5577:54;6629:5;6626:35;6616:2;;6675:1;;6665:12;6616:2;6610:74;:::o" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getChildChainStreamerImplementation()": "f9e0a13e", + "getGaugeImplementation()": "39312dee", + "getGaugePool(address)": "744a65dd", + "getGaugeStreamer(address)": "90b20087", + "getPoolGauge(address)": "a8ea6875", + "getPoolStreamer(address)": "8a4ffeb0", + "isGaugeFromFactory(address)": "ce3cc8bd", + "isStreamerFromFactory(address)": "cbda9327" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"contract IChildChainStreamer\",\"name\":\"childChainStreamer\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"streamer\",\"type\":\"address\"}],\"name\":\"RewardsOnlyGaugeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChildChainStreamerImplementation\",\"outputs\":[{\"internalType\":\"contract IChildChainStreamer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeImplementation\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugePool\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugeStreamer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolStreamer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"streamer\",\"type\":\"address\"}],\"name\":\"isStreamerFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(address)\":{\"details\":\"As anyone can register arbitrary Balancer pools with the Vault, it's impossible to prove onchain that `pool` is a \\\"valid\\\" deployment. Care must be taken to ensure that gauges deployed from this factory are suitable before they are added to the GaugeController. This factory disallows deploying multiple gauges for a single pool.\",\"params\":{\"pool\":\"The address of the pool for which to deploy a gauge\"},\"returns\":{\"_0\":\"The address of the deployed gauge\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create(address)\":{\"notice\":\"Deploys a new gauge for a Balancer pool.\"},\"getChildChainStreamerImplementation()\":{\"notice\":\"Returns the address of the implementation used for streamer deployments.\"},\"getGaugeImplementation()\":{\"notice\":\"Returns the address of the implementation used for gauge deployments.\"},\"getGaugePool(address)\":{\"notice\":\"Returns the address of the pool which `gauge` belongs.\"},\"getGaugeStreamer(address)\":{\"notice\":\"Returns the address of the streamer belonging to `gauge`.\"},\"getPoolGauge(address)\":{\"notice\":\"Returns the address of the gauge belonging to `pool`.\"},\"getPoolStreamer(address)\":{\"notice\":\"Returns the address of the streamer belonging to `pool`'s gauge.\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"},\"isStreamerFromFactory(address)\":{\"notice\":\"Returns true if `streamer` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/ChildChainLiquidityGaugeFactory.sol\":\"ChildChainLiquidityGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol\":{\"keccak256\":\"0xe551b5fd237d7c07b4f767b8bd6c58442efa401dfb78b58923b2f3c2cf772e13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83d69bd6f54f255076db95c260acc7b5bab6df94cf8ae8bf0097e43ca6a8f085\",\"dweb:/ipfs/QmcxcN5ydnGGpBg6uKG723AXWJK8XeXQoDHYEHtD1AkP9J\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol\":{\"keccak256\":\"0xf5a92d4719022a69fde49af957fd21716bce7bcabb1f7acefd7a39eb0127f442\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdb77139e0ed80197ee132c0d7bf4a94834103ba4e3f08db44419f14df5522f9\",\"dweb:/ipfs/QmXHXjaKBifMCuetXojcVjNVLyVHSnfjvwzHBqGL6cXeEc\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol\":{\"keccak256\":\"0xc6b2e51a60e61ad332aa023a7228a67647fad18fd55358f73a3f86f09ec4ef3e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://82c4bb28284b68f05c0364a405cdfe46d62b0e91cc61c2208b47401d7a577528\",\"dweb:/ipfs/QmYGkdmLoLA86gzyYnowMgj6qwhzmBzDnz4nQWUs7U669A\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":{\"keccak256\":\"0x0ef386c5d211024ce07fd77245128db56fdfd2aae7e5e4232b72fb0cecb6be03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f09b20288f085f7a2ce289a8b1676d2d873e76a25929fbd9328e2d722225b5\",\"dweb:/ipfs/QmbVW5u6dSXsTBb66tKHS9QN5RPonEcpNzAjJ1nBe8UVRi\"]},\"contracts/gauges/ChildChainLiquidityGaugeFactory.sol\":{\"keccak256\":\"0x015da81bd78bc4a457d338642bb7fbecdd9c861ebbcd10a4b0e9980d3c5b3b08\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03db9e616924c10b63860d0fad2bb6d43e91613dd9c8d35baa0b76c6546f6997\",\"dweb:/ipfs/QmXPfC5y1eEPtc6v6d6qQEQa88oBHAziC6fMcCfS5ZuYHx\"]}},\"version\":1}" + } + }, + "contracts/gauges/StakelessGauge.sol": { + "StakelessGauge": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "periodTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodEmissions", + "type": "uint256" + } + ], + "name": "Checkpoint", + "type": "event" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"periodTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"periodEmissions\",\"type\":\"uint256\"}],\"name\":\"Checkpoint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"killGauge()\":{\"notice\":\"Kills the gauge so it cannot mint BAL\"},\"unkillGauge()\":{\"notice\":\"Unkills the gauge so it can mint BAL again\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/StakelessGauge.sol\":\"StakelessGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]}},\"version\":1}" + } + }, + "contracts/gauges/arbitrum/ArbitrumRootGauge.sol": { + "ArbitrumRootGauge": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IBalancerMinter", + "name": "minter", + "type": "address" + }, + { + "internalType": "contract IGatewayRouter", + "name": "gatewayRouter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "periodTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodEmissions", + "type": "uint256" + } + ], + "name": "Checkpoint", + "type": "event" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalBridgeCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6101e06040523480156200001257600080fd5b50604051620016cc380380620016cc833981810160405260408110156200003857600080fd5b508051602091820151600160009081556040805163e6dec36f60e01b815290519394929385936001600160a01b0385169263e6dec36f9260048083019392829003018186803b1580156200008b57600080fd5b505afa158015620000a0573d6000803e3d6000fd5b505050506040513d6020811015620000b757600080fd5b50516040805163c003969960e01b815290519192506000916001600160a01b0384169163c0039699916004808301926020929190829003018186803b1580156200010057600080fd5b505afa15801562000115573d6000803e3d6000fd5b505050506040513d60208110156200012c57600080fd5b505160408051632c6f4d6f60e11b815290519192506000916001600160a01b038616916358de9ade916004808301926020929190829003018186803b1580156200017557600080fd5b505afa1580156200018a573d6000803e3d6000fd5b505050506040513d6020811015620001a157600080fd5b50516001600160601b0319606084811b821660805285811b821660a05286811b821660c05282901b1660e052604080516303e1469160e61b815290519192506001600160a01b0383169163f851a44091600480820192602092909190829003018186803b1580156200021257600080fd5b505afa15801562000227573d6000803e3d6000fd5b505050506040513d60208110156200023e57600080fd5b505160601b6001600160601b0319166101005260408051635c3dab0b60e11b815290516001600160a01b0385169163b87b5616916004808301926020929190829003018186803b1580156200029257600080fd5b505afa158015620002a7573d6000803e3d6000fd5b505050506040513d6020811015620002be57600080fd5b505161012052604080516321609bbf60e01b815290516001600160a01b038516916321609bbf916004808301926020929190829003018186803b1580156200030557600080fd5b505afa1580156200031a573d6000803e3d6000fd5b505050506040513d60208110156200033157600080fd5b505161014052604080516303f7d6c760e51b815290516001600160a01b03851691637efad8e0916004808301926020929190829003018186803b1580156200037857600080fd5b505afa1580156200038d573d6000803e3d6000fd5b505050506040513d6020811015620003a457600080fd5b505161016052505060001960025550506040805163c003969960e01b815290516001600160a01b038084169263bda009fe929186169163c003969991600480820192602092909190829003018186803b1580156200040157600080fd5b505afa15801562000416573d6000803e3d6000fd5b505050506040513d60208110156200042d57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b1580156200047557600080fd5b505afa1580156200048a573d6000803e3d6000fd5b505050506040513d6020811015620004a157600080fd5b50516001600160601b0319606091821b81166101805291811b9091166101a05233901b6101c0525060805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205161014051610160516101805160601c6101a05160601c6101c05160601c61114c62000580600039806103b55280610ba2525080610ca8525080610abc52508061074052508061071f5250806105e9528061078c5250806102f4528061048e528061097e525080610577528061067b525080610882525080610ede5280610fdb525080610a805280610ce5525061114c6000f3fe6080604052600436106100965760003560e01c8063ab8f094511610069578063c2c4c5c11161004e578063c2c4c5c1146101c0578063c4d66de8146101c8578063d34fb2671461020857610096565b8063ab8f094514610194578063b0245225146101ab57610096565b8063094007071461009b5780631b88094d146100ed5780634b8200931461012b5780639c868ac01461017f575b600080fd5b3480156100a757600080fd5b506100db600480360360208110156100be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661021d565b60408051918252519081900360200190f35b3480156100f957600080fd5b506101026102ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561013757600080fd5b5061016b6004803603602081101561014e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166102cd565b604080519115158252519081900360200190f35b34801561018b57600080fd5b5061016b6102d3565b3480156101a057600080fd5b506101a96102dc565b005b3480156101b757600080fd5b506100db6103ad565b61016b61046c565b3480156101d457600080fd5b506101a9600480360360208110156101eb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610912565b34801561021457600080fd5b506101a9610966565b600073ffffffffffffffffffffffffffffffffffffffff821630146102a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461038057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac8288c06040518163ffffffff1660e01b815260040160606040518083038186803b15801561041957600080fd5b505afa15801561042d573d6000803e3d6000fd5b505050506040513d606081101561044357600080fd5b50805160208201516040909201519094509092509050610464838383610a34565b935050505090565b6000610476610a3a565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461051a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6002546000610527610a53565b90508082101561090457604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b1580156105be57600080fd5b505af11580156105d2573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610817578481111561062357610817565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b5051905082851080159061070457508262093a800185105b156107bd57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089028161076857fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506107d29050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161060b565b50600284905560048054830190558115801590610837575060055460ff16155b1561090057604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b1580156108ca57600080fd5b505af11580156108de573d6000803e3d6000fd5b505050506040513d60208110156108f457600080fd5b50610900905082610a7e565b5050505b6001925050506102ca610e64565b61091a610e6b565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610a0a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b91020190565b610a4c60026000541415610190611073565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b505050506040513d6020811015610b5957600080fd5b5050604080517fac8288c000000000000000000000000000000000000000000000000000000000815290516000918291829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163ac8288c091600480820192606092909190829003018186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d6060811015610c1357600080fd5b508051602082015160409092015190945090925090506000610c36848484610a34565b9050803414610ca657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e636f7272656374206d73672e76616c756520706173736564000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d2ce7d65827f0000000000000000000000000000000000000000000000000000000000000000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898989896040516020018082815260200180602001828103825260008152602001602001925050506040516020818303038152906040526040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610df4578181015183820152602001610ddc565b50505050905090810190601f168015610e215780820380516001836020036101000a031916815260200191505b509750505050505050506000604051808303818588803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b50505050505050505050565b6001600055565b60025415610eda57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4257600080fd5b505afa158015610f56573d6000803e3d6000fd5b505050506040513d6020811015610f6c57600080fd5b5051905080610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110f36024913960400191505060405180910390fd5b6001819055610fd3610a53565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b505160035550565b816110815761108181611085565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a2646970667358221220b7cd2446ceecae6ae022e512fb528dc49009b7ea1f563ecff8743d815934d40a64736f6c63430007010033", + "opcodes": "PUSH2 0x1E0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x16CC CODESIZE SUB DUP1 PUSH3 0x16CC DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xE6DEC36F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 DUP6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP3 PUSH4 0xE6DEC36F SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x115 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2C6F4D6F PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x58DE9ADE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x18A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x1A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 DUP2 SHL DUP3 AND PUSH1 0x80 MSTORE DUP6 DUP2 SHL DUP3 AND PUSH1 0xA0 MSTORE DUP7 DUP2 SHL DUP3 AND PUSH1 0xC0 MSTORE DUP3 SWAP1 SHL AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x227 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x23E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5C3DAB0B PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0xB87B5616 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x2A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x21609BBF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x21609BBF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x305 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x31A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3F7D6C7 PUSH1 0xE5 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x7EFAD8E0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x38D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x160 MSTORE POP POP PUSH1 0x0 NOT PUSH1 0x2 SSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 PUSH4 0xBDA009FE SWAP3 SWAP2 DUP7 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x416 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE MLOAD PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x48A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x4A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x180 MSTORE SWAP2 DUP2 SHL SWAP1 SWAP2 AND PUSH2 0x1A0 MSTORE CALLER SWAP1 SHL PUSH2 0x1C0 MSTORE POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x60 SHR PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH1 0x60 SHR PUSH2 0x114C PUSH3 0x580 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x3B5 MSTORE DUP1 PUSH2 0xBA2 MSTORE POP DUP1 PUSH2 0xCA8 MSTORE POP DUP1 PUSH2 0xABC MSTORE POP DUP1 PUSH2 0x740 MSTORE POP DUP1 PUSH2 0x71F MSTORE POP DUP1 PUSH2 0x5E9 MSTORE DUP1 PUSH2 0x78C MSTORE POP DUP1 PUSH2 0x2F4 MSTORE DUP1 PUSH2 0x48E MSTORE DUP1 PUSH2 0x97E MSTORE POP DUP1 PUSH2 0x577 MSTORE DUP1 PUSH2 0x67B MSTORE POP DUP1 PUSH2 0x882 MSTORE POP DUP1 PUSH2 0xEDE MSTORE DUP1 PUSH2 0xFDB MSTORE POP DUP1 PUSH2 0xA80 MSTORE DUP1 PUSH2 0xCE5 MSTORE POP PUSH2 0x114C PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x96 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB8F0945 GT PUSH2 0x69 JUMPI DUP1 PUSH4 0xC2C4C5C1 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x208 JUMPI PUSH2 0x96 JUMP JUMPDEST DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0xB0245225 EQ PUSH2 0x1AB JUMPI PUSH2 0x96 JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0x9B JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0xED JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x17F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x21D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x102 PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16B PUSH2 0x2D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x2DC JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH2 0x3AD JUMP JUMPDEST PUSH2 0x16B PUSH2 0x46C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x912 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x966 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x2A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x380 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAC8288C0 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x464 DUP4 DUP4 DUP4 PUSH2 0xA34 JUMP JUMPDEST SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x476 PUSH2 0xA3A JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x51A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x527 PUSH2 0xA53 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x904 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x817 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x623 JUMPI PUSH2 0x817 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x704 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x7BD JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x768 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x7D2 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x60B JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x837 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x900 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x900 SWAP1 POP DUP3 PUSH2 0xA7E JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x2CA PUSH2 0xE64 JUMP JUMPDEST PUSH2 0x91A PUSH2 0xE6B JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0xA0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST SWAP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH2 0xA4C PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x1073 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0xAC8288C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xAC8288C0 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xC13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xC36 DUP5 DUP5 DUP5 PUSH2 0xA34 JUMP JUMPDEST SWAP1 POP DUP1 CALLVALUE EQ PUSH2 0xCA6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E636F7272656374206D73672E76616C756520706173736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2CE7D65 DUP3 PUSH32 0x0 PUSH1 0x5 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDF4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDDC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE21 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE58 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xEDA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xFC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x10F3 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xFD3 PUSH2 0xA53 JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1041 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1055 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x106B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0x1081 JUMPI PUSH2 0x1081 DUP2 PUSH2 0x1085 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB7 0xCD 0x24 CHAINID 0xCE 0xEC 0xAE PUSH11 0xE022E512FB528DC49009B7 0xEA 0x1F JUMP RETURNDATACOPY 0xCF 0xF8 PUSH21 0x3D815934D40A64736F6C6343000701003300000000 ", + "sourceMap": "907:2743:59:-:0;;;1161:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1161:270:59;;;;;;;2070:1:44;2175:7;:22;;;1161:270:59;2149:30:58;;-1:-1:-1;2149:30:58;;;;1161:270:59;;;;;;-1:-1:-1;2149:28:58;;;-1:-1:-1;;2149:30:58;;;;;1161:270:59;2149:30:58;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2149:30:58;2208:29;;;-1:-1:-1;2208:29:58;;;;2149:30;;-1:-1:-1;2190:15:58;;-1:-1:-1;2208:27:58;;;-1:-1:-1;;2208:29:58;;;;;2149:30;;2208:29;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2208:29:58;2282:27;;;-1:-1:-1;2282:27:58;;;;2208:29;;-1:-1:-1;2247:32:58;;-1:-1:-1;2282:25:58;;;;;:27;;;;;2208:29;;2282:27;;;;;;;:25;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2282:27:58;-1:-1:-1;;2320:20:58;;;;;;;2350:24;;;;;;;2384:16;;;;;;;2410:34;;;;;;2475:23;;;-1:-1:-1;2475:23:58;;;;2282:27;;-1:-1:-1;;2410:34:58;;;2475:21;;:23;;;;;2282:27;;2475:23;;;;;;;;2410:34;2475:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2475:23:58;2454:44;;-1:-1:-1;2454:44:58;;;2532:32;;;-1:-1:-1;2532:32:58;;;;-1:-1:-1;2532:30:58;;;;;:32;;;;;2475:23;;2532:32;;;;;;;:30;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2532:32:58;2509:55;;2604:39;;;-1:-1:-1;2604:39:58;;;;-1:-1:-1;2604:37:58;;;-1:-1:-1;;2604:39:58;;;;;2532:32;;2604:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2604:39:58;2574:69;;2673:29;;;-1:-1:-1;2673:29:58;;;;-1:-1:-1;2673:27:58;;;;;:29;;;;;2604:39;;2673:29;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2673:29:58;2653:49;;-1:-1:-1;;;2863:7:58;:27;-1:-1:-1;;1304:25:59::1;::::0;;-1:-1:-1;1304:25:59;;;;-1:-1:-1;1271:24:59;;::::1;::::0;::::1;::::0;1304:23;;::::1;::::0;-1:-1:-1;;1304:25:59::1;::::0;;::::1;::::0;2673:29:58;;1304:25:59;;;;;;;;:23;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;1304:25:59;1271:60:::1;::::0;;-1:-1:-1;1271:60:59;;;-1:-1:-1;1271:60:59;;;-1:-1:-1;1271:60:59;;::::1;;::::0;::::1;::::0;;;;;;;1304:25:::1;::::0;1271:60;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;1271:60:59;-1:-1:-1;;;;;;1260:71:59::1;::::0;;;;;::::1;::::0;1341:30;;;;;;::::1;::::0;1413:10:::1;1381:43:::0;::::1;;::::0;-1:-1:-1;907:2743:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "9490": [ + { + "length": 32, + "start": 2688 + }, + { + "length": 32, + "start": 3301 + } + ], + "9492": [ + { + "length": 32, + "start": 3806 + }, + { + "length": 32, + "start": 4059 + } + ], + "9494": [ + { + "length": 32, + "start": 2178 + } + ], + "9496": [ + { + "length": 32, + "start": 1399 + }, + { + "length": 32, + "start": 1659 + } + ], + "9498": [ + { + "length": 32, + "start": 756 + }, + { + "length": 32, + "start": 1166 + }, + { + "length": 32, + "start": 2430 + } + ], + "9506": [ + { + "length": 32, + "start": 1513 + }, + { + "length": 32, + "start": 1932 + } + ], + "9508": [ + { + "length": 32, + "start": 1823 + } + ], + "9510": [ + { + "length": 32, + "start": 1856 + } + ], + "9973": [ + { + "length": 32, + "start": 2748 + } + ], + "9975": [ + { + "length": 32, + "start": 3240 + } + ], + "9977": [ + { + "length": 32, + "start": 949 + }, + { + "length": 32, + "start": 2978 + } + ] + }, + "linkReferences": {}, + "object": "6080604052600436106100965760003560e01c8063ab8f094511610069578063c2c4c5c11161004e578063c2c4c5c1146101c0578063c4d66de8146101c8578063d34fb2671461020857610096565b8063ab8f094514610194578063b0245225146101ab57610096565b8063094007071461009b5780631b88094d146100ed5780634b8200931461012b5780639c868ac01461017f575b600080fd5b3480156100a757600080fd5b506100db600480360360208110156100be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661021d565b60408051918252519081900360200190f35b3480156100f957600080fd5b506101026102ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561013757600080fd5b5061016b6004803603602081101561014e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166102cd565b604080519115158252519081900360200190f35b34801561018b57600080fd5b5061016b6102d3565b3480156101a057600080fd5b506101a96102dc565b005b3480156101b757600080fd5b506100db6103ad565b61016b61046c565b3480156101d457600080fd5b506101a9600480360360208110156101eb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610912565b34801561021457600080fd5b506101a9610966565b600073ffffffffffffffffffffffffffffffffffffffff821630146102a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461038057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac8288c06040518163ffffffff1660e01b815260040160606040518083038186803b15801561041957600080fd5b505afa15801561042d573d6000803e3d6000fd5b505050506040513d606081101561044357600080fd5b50805160208201516040909201519094509092509050610464838383610a34565b935050505090565b6000610476610a3a565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461051a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6002546000610527610a53565b90508082101561090457604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b1580156105be57600080fd5b505af11580156105d2573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610817578481111561062357610817565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b5051905082851080159061070457508262093a800185105b156107bd57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089028161076857fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506107d29050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161060b565b50600284905560048054830190558115801590610837575060055460ff16155b1561090057604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b1580156108ca57600080fd5b505af11580156108de573d6000803e3d6000fd5b505050506040513d60208110156108f457600080fd5b50610900905082610a7e565b5050505b6001925050506102ca610e64565b61091a610e6b565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610a0a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b91020190565b610a4c60026000541415610190611073565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b505050506040513d6020811015610b5957600080fd5b5050604080517fac8288c000000000000000000000000000000000000000000000000000000000815290516000918291829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163ac8288c091600480820192606092909190829003018186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d6060811015610c1357600080fd5b508051602082015160409092015190945090925090506000610c36848484610a34565b9050803414610ca657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e636f7272656374206d73672e76616c756520706173736564000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d2ce7d65827f0000000000000000000000000000000000000000000000000000000000000000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898989896040516020018082815260200180602001828103825260008152602001602001925050506040516020818303038152906040526040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610df4578181015183820152602001610ddc565b50505050905090810190601f168015610e215780820380516001836020036101000a031916815260200191505b509750505050505050506000604051808303818588803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b50505050505050505050565b6001600055565b60025415610eda57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4257600080fd5b505afa158015610f56573d6000803e3d6000fd5b505050506040513d6020811015610f6c57600080fd5b5051905080610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110f36024913960400191505060405180910390fd5b6001819055610fd3610a53565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b505160035550565b816110815761108181611085565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a2646970667358221220b7cd2446ceecae6ae022e512fb528dc49009b7ea1f563ecff8743d815934d40a64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x96 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB8F0945 GT PUSH2 0x69 JUMPI DUP1 PUSH4 0xC2C4C5C1 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x208 JUMPI PUSH2 0x96 JUMP JUMPDEST DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0xB0245225 EQ PUSH2 0x1AB JUMPI PUSH2 0x96 JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0x9B JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0xED JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x17F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x21D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x102 PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16B PUSH2 0x2D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x2DC JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH2 0x3AD JUMP JUMPDEST PUSH2 0x16B PUSH2 0x46C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x912 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x966 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x2A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x380 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAC8288C0 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x464 DUP4 DUP4 DUP4 PUSH2 0xA34 JUMP JUMPDEST SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x476 PUSH2 0xA3A JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x51A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x527 PUSH2 0xA53 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x904 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x817 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x623 JUMPI PUSH2 0x817 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x704 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x7BD JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x768 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x7D2 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x60B JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x837 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x900 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x900 SWAP1 POP DUP3 PUSH2 0xA7E JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x2CA PUSH2 0xE64 JUMP JUMPDEST PUSH2 0x91A PUSH2 0xE6B JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0xA0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST SWAP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH2 0xA4C PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x1073 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0xAC8288C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xAC8288C0 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xC13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xC36 DUP5 DUP5 DUP5 PUSH2 0xA34 JUMP JUMPDEST SWAP1 POP DUP1 CALLVALUE EQ PUSH2 0xCA6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E636F7272656374206D73672E76616C756520706173736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2CE7D65 DUP3 PUSH32 0x0 PUSH1 0x5 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDF4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDDC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE21 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE58 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xEDA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xFC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x10F3 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xFD3 PUSH2 0xA53 JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1041 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1055 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x106B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0x1081 JUMPI PUSH2 0x1081 DUP2 PUSH2 0x1085 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB7 0xCD 0x24 CHAINID 0xCE 0xEC 0xAE PUSH11 0xE022E512FB528DC49009B7 0xEA 0x1F JUMP RETURNDATACOPY 0xCF 0xF8 PUSH21 0x3D815934D40A64736F6C6343000701003300000000 ", + "sourceMap": "907:2743:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6514:191:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6514:191:58;;;;:::i;:::-;;;;;;;;;;;;;;;;1635:99:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6408:100:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6408:100:58;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6711:92;;;;;;;;;;;;;:::i;6878:154::-;;;;;;;;;;;;;:::i;:::-;;3179:246:59;;;;;;;;;;;;;:::i;3432:2685:58:-;;;:::i;1437:192:59:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1437:192:59;;;;:::i;7112:157:58:-;;;;;;;;;;;;;:::i;6514:191::-;6588:7;6615:21;;;6631:4;6615:21;6607:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6688:10:58;;;6514:191::o;1635:99:59:-;1717:10;;;;;;;1635:99;;:::o;6408:100:58:-;-1:-1:-1;6497:4:58;;6408:100::o;6711:92::-;6787:9;;;;6711:92;:::o;6878:154::-;6935:10;:41;6957:18;6935:41;;6927:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:9;:16;;;;7021:4;7009:16;;;6878:154::o;3179:246:59:-;3232:7;3252:16;3270;3288:25;3317:8;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3317:26:59;;;;;;;;;;;;;-1:-1:-1;3317:26:59;;-1:-1:-1;3317:26:59;-1:-1:-1;3360:58:59;3317:26;;;3360:19;:58::i;:::-;3353:65;;;;;3179:246;:::o;3432:2685:58:-;3502:4;2613:20:44;:18;:20::i;:::-;3526:10:58::1;:41;3548:18;3526:41;;3518:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3621:7;::::0;3600:18:::1;3662:16;:14;:16::i;:::-;3638:40;;3706:13;3693:10;:26;3689:2400;;;3735:48;::::0;;;;;3777:4:::1;3735:48;::::0;::::1;::::0;;;:33:::1;:16;:33;::::0;::::1;::::0;:48;;;;;-1:-1:-1;;3735:48:58;;;;;;;-1:-1:-1;3735:33:58;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3813:5:58::1;::::0;;3923:15:::1;::::0;3870;;;::::1;::::0;3813:5;;-1:-1:-1;3798:12:58::1;::::0;-1:-1:-1;3941:20:58::1;3923:38;3870:15:::0;3975:1869:::1;4008:10;4021:3;4008:16;4004:1;:20;3975:1869;;;4057:13;4053:1;:17;4049:28;;;4072:5;;4049:28;4212:65;::::0;;;;;4259:4:::1;4212:65;::::0;::::1;::::0;4121:7:::1;4117:11:::0;::::1;4212:65:::0;;;;;;;;4096:18:::1;::::0;;;4212:38:::1;:16;:38;::::0;::::1;::::0;:65;;;;;::::1;::::0;;;;;;;;4096:18;4212:38;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4212:65:58;;-1:-1:-1;4300:27:58;;::::1;::::0;::::1;::::0;:67:::1;;;4347:10;4360:7;4347:20;4331:13;:36;4300:67;4296:1424;;;4946:26:::0;;::::1;5059:6;5012:18:::0;;::::1;:43:::0;::::1;5011:54;4994:71;;5174:27;5153:17;5146:4;:24;5145:56;;;;;;::::0;-1:-1:-1;5329:7:58::1;:32:::0;;::::1;5445:6;5402:18:::0;;::::1;:39:::0;::::1;5474:5;:12:::0;;;5508:15:::1;:31:::0;;;5578:20:::1;5561:37:::0;;::::1;::::0;5401:50:::1;5383:68:::0;;;::::1;::::0;-1:-1:-1;4296:1424:58::1;::::0;-1:-1:-1;4296:1424:58::1;;5695:6;5684:7;5663:18:::0;;::::1;:28;5662:39;5645:56;;4296:1424;5743:38;::::0;;;;;;;5754:10;;5743:38:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;5799:30:58;;;::::1;::::0;-1:-1:-1;4026:3:58::1;;3975:1869;;;-1:-1:-1::0;5858:7:58::1;:23:::0;;;5895:10:::1;:26:::0;;;::::1;::::0;;5940:16;;;;;:30:::1;;-1:-1:-1::0;5961:9:58::1;::::0;::::1;;5960:10;5940:30;5936:143;;;5990:27;::::0;;;;;6011:4:::1;5990:27;::::0;::::1;::::0;;;:12:::1;:7;:12;::::0;::::1;::::0;:27;;;;;::::1;::::0;;;;;;;;-1:-1:-1;5990:12:58;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6035:29:58::1;::::0;-1:-1:-1;6051:12:58;6035:15:::1;:29::i;:::-;3689:2400;;;;6106:4;6099:11;;;;2654:19:44::0;:17;:19::i;1437:192:59:-;1566:23;:21;:23::i;:::-;1600:10;:22;;;;;;;;;;;;;;;;;;1437:192::o;7112:157:58:-;7171:10;:41;7193:18;7171:41;;7163:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7245:9;:17;;;;;;7112:157::o;3431:217:59:-;3602:19;;:39;;3431:217::o;2686:271:44:-;2809:48;2113:1;2818:7;;:19;;8984:3:20;2809:8:44;:48::i;:::-;2113:1;2932:7;:18;2686:271::o;6123:167:58:-;6252:31;6271:7;6253:15;:25;6252:31;;6123:167::o;1740:1433:59:-;1889:9;:17;;;1907:8;1917:10;1889:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2005:26:59;;;;;;;;1940:16;;;;;;2005:24;:8;:24;;;;:26;;;;;;;;;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2005:26:59;;;;;;;;;;;;;-1:-1:-1;2005:26:59;;-1:-1:-1;2005:26:59;-1:-1:-1;2041:23:59;2067:58;2005:26;;;2067:19;:58::i;:::-;2041:84;;2156:15;2143:9;:28;2135:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2937:14;:31;;;2977:15;3008:9;3031:10;;;;;;;;;;;3055;3079:8;3101;3134:17;3123:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2937:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1740:1433;;;;;:::o;2963:208:44:-;2070:1;3142:7;:22;2963:208::o;2956:470:58:-;3016:7;;:12;3008:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3198:12;3213:11;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3213:18:58;;-1:-1:-1;3249:9:58;3241:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3310:5;:12;;;3342:16;:14;:16::i;:::-;3332:7;:26;;;;3386:11;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3386:33:58;3368:15;:51;-1:-1:-1;2956:470:58:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;1074:3172::-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "getRecipient()": "1b88094d", + "getTotalBridgeCost()": "b0245225", + "initialize(address)": "c4d66de8", + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBalancerMinter\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"contract IGatewayRouter\",\"name\":\"gatewayRouter\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"periodTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"periodEmissions\",\"type\":\"uint256\"}],\"name\":\"Checkpoint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBridgeCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"killGauge()\":{\"notice\":\"Kills the gauge so it cannot mint BAL\"},\"unkillGauge()\":{\"notice\":\"Unkills the gauge so it can mint BAL again\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/arbitrum/ArbitrumRootGauge.sol\":\"ArbitrumRootGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]},\"contracts/gauges/arbitrum/ArbitrumRootGauge.sol\":{\"keccak256\":\"0x575c96cbfeaf36fedf67b6ac19915902ffca9b33fbca973c6a83f907fdf08320\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1227cb056b5100ce5b347c1af562e93d6503fd92f2c6caaeadfdb3d47d12e5af\",\"dweb:/ipfs/QmUzQezbR6135U1CbBYqE2ommM3gGCCXZXdHrTZxRSdExG\"]},\"contracts/gauges/arbitrum/IArbitrumFeeProvider.sol\":{\"keccak256\":\"0xa8e72265518220c6c379b069a760221a368eb77477bba74778717ded9b32ab1d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9f3f81476872c30200b393a699a35a042863bf9f3ab431f5473eee12db2ab8a\",\"dweb:/ipfs/QmemNU9eK9aATZLKi4qwRixzwmfHesBN6sgteiRj8HmHbW\"]},\"contracts/gauges/arbitrum/IGatewayRouter.sol\":{\"keccak256\":\"0x18111553a1164746a16d3143d5b8bf2e15f825eefcbe0a987539cebde460a0f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8b5dc6100de63234a9543ff772cfeaa26d004b3838f2173e233ecf4ead0df976\",\"dweb:/ipfs/QmZwLoAmyzXmRF5RoJyb3AHvyTWEuaJNX8oLTXF6k7jD5W\"]}},\"version\":1}" + } + }, + "contracts/gauges/arbitrum/ArbitrumRootGaugeFactory.sol": { + "ArbitrumRootGaugeFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IBalancerMinter", + "name": "minter", + "type": "address" + }, + { + "internalType": "contract IGatewayRouter", + "name": "gatewayRouter", + "type": "address" + }, + { + "internalType": "uint64", + "name": "gasLimit", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "gasPrice", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxSubmissionCost", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "maxSubmissionCost", + "type": "uint256" + } + ], + "name": "ArbitrumFeesModified", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "ArbitrumRootGaugeCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getArbitrumFees", + "outputs": [ + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSubmissionCost", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugeRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "getRecipientGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "gasLimit", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "gasPrice", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "maxSubmissionCost", + "type": "uint64" + } + ], + "name": "setArbitrumFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60c06040523480156200001157600080fd5b506040516200240138038062002401833981016040819052620000349162000136565b306080526001600160601b0319606087901b1660a052604051859085906200005c906200010a565b62000069929190620001c1565b604051809103906000f08015801562000086573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055600380546001600160401b0319166001600160401b0394851617600160401b600160801b031916680100000000000000009385169390930292909217600160801b600160c01b031916600160801b919093160291909117905550620001f4915050565b6116cc8062000d3583390190565b80516001600160401b03811681146200013057600080fd5b92915050565b60008060008060008060c087890312156200014f578182fd5b86516200015c81620001db565b60208801519096506200016f81620001db565b60408801519095506200018281620001db565b935062000193886060890162000118565b9250620001a4886080890162000118565b9150620001b58860a0890162000118565b90509295509295509295565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0381168114620001f157600080fd5b50565b60805160a05160601c610b1a6200021b600039806102345250806101e45250610b1a6000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063aaabadc511610076578063ce3cc8bd1161005b578063ce3cc8bd1461014e578063e9bde6041461016e578063fa72ce9514610183576100be565b8063aaabadc51461012f578063ac8288c014610137576100be565b8063851c1bb3116100a7578063851c1bb3146100f45780638d928af8146101145780639ed933181461011c576100be565b806339312dee146100c35780637d5d0d10146100e1575b600080fd5b6100cb610196565b6040516100d891906109b9565b60405180910390f35b6100cb6100ef3660046108ac565b6101b2565b610107610102366004610904565b6101e0565b6040516100d891906109e5565b6100cb610232565b6100cb61012a3660046108ac565b610256565b6100cb61041e565b61013f6104aa565b6040516100d893929190610a88565b61016161015c3660046108ac565b6104e3565b6040516100d891906109da565b61018161017c366004610944565b61050e565b005b6100cb6101913660046108ac565b6105fc565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054165b919050565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610215929190610989565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff818116600090815260026020526040812054909116156102c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b790610a1a565b60405180910390fd5b600080546102e39073ffffffffffffffffffffffffffffffffffffffff16610682565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de8906103389086906004016109b9565b600060405180830381600087803b15801561035257600080fd5b505af1158015610366573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff818116600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255938716808352600290945280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517f7b5a78afeb182d33f2d682540e1db4413ee8d4f1203a92c9edf1f525057a91229190a392915050565b6000610428610232565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561046d57600080fd5b505afa158015610481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a591906108c8565b905090565b60035467ffffffffffffffff80821692680100000000000000008304821692700100000000000000000000000000000000900490911690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61051661072f565b600380547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff858116919091177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000085831602177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000918416919091021790556040517f3db8f737ebeecf95c5dc9b279051cab0e7b70a8e3d63148b38faafcf7d42314e906105ef90859085908590610a9e565b60405180910390a1505050565b60008173ffffffffffffffffffffffffffffffffffffffff16631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067c91906108c8565b92915050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff81166101db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b790610a51565b600061075e6000357fffffffff00000000000000000000000000000000000000000000000000000000166101e0565b905061077561076d8233610778565b610191610815565b50565b600061078261041e565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b81526004016107be939291906109ee565b60206040518083038186803b1580156107d657600080fd5b505afa1580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e91906108e4565b9392505050565b816108235761082381610827565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b803567ffffffffffffffff8116811461067c57600080fd5b6000602082840312156108bd578081fd5b813561080e81610ac2565b6000602082840312156108d9578081fd5b815161080e81610ac2565b6000602082840312156108f5578081fd5b8151801515811461080e578182fd5b600060208284031215610915578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461080e578182fd5b600080600060608486031215610958578182fd5b6109628585610894565b92506109718560208601610894565b91506109808560408601610894565b90509250925092565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b9283526020830191909152604082015260600190565b67ffffffffffffffff93841681529183166020830152909116604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461077557600080fdfea26469706673582212207abc086fedbb3591a5cde8a99c00519aabcf4611656d6253aca4a1a4cb5b400d64736f6c634300070100336101e06040523480156200001257600080fd5b50604051620016cc380380620016cc833981810160405260408110156200003857600080fd5b508051602091820151600160009081556040805163e6dec36f60e01b815290519394929385936001600160a01b0385169263e6dec36f9260048083019392829003018186803b1580156200008b57600080fd5b505afa158015620000a0573d6000803e3d6000fd5b505050506040513d6020811015620000b757600080fd5b50516040805163c003969960e01b815290519192506000916001600160a01b0384169163c0039699916004808301926020929190829003018186803b1580156200010057600080fd5b505afa15801562000115573d6000803e3d6000fd5b505050506040513d60208110156200012c57600080fd5b505160408051632c6f4d6f60e11b815290519192506000916001600160a01b038616916358de9ade916004808301926020929190829003018186803b1580156200017557600080fd5b505afa1580156200018a573d6000803e3d6000fd5b505050506040513d6020811015620001a157600080fd5b50516001600160601b0319606084811b821660805285811b821660a05286811b821660c05282901b1660e052604080516303e1469160e61b815290519192506001600160a01b0383169163f851a44091600480820192602092909190829003018186803b1580156200021257600080fd5b505afa15801562000227573d6000803e3d6000fd5b505050506040513d60208110156200023e57600080fd5b505160601b6001600160601b0319166101005260408051635c3dab0b60e11b815290516001600160a01b0385169163b87b5616916004808301926020929190829003018186803b1580156200029257600080fd5b505afa158015620002a7573d6000803e3d6000fd5b505050506040513d6020811015620002be57600080fd5b505161012052604080516321609bbf60e01b815290516001600160a01b038516916321609bbf916004808301926020929190829003018186803b1580156200030557600080fd5b505afa1580156200031a573d6000803e3d6000fd5b505050506040513d60208110156200033157600080fd5b505161014052604080516303f7d6c760e51b815290516001600160a01b03851691637efad8e0916004808301926020929190829003018186803b1580156200037857600080fd5b505afa1580156200038d573d6000803e3d6000fd5b505050506040513d6020811015620003a457600080fd5b505161016052505060001960025550506040805163c003969960e01b815290516001600160a01b038084169263bda009fe929186169163c003969991600480820192602092909190829003018186803b1580156200040157600080fd5b505afa15801562000416573d6000803e3d6000fd5b505050506040513d60208110156200042d57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b1580156200047557600080fd5b505afa1580156200048a573d6000803e3d6000fd5b505050506040513d6020811015620004a157600080fd5b50516001600160601b0319606091821b81166101805291811b9091166101a05233901b6101c0525060805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205161014051610160516101805160601c6101a05160601c6101c05160601c61114c62000580600039806103b55280610ba2525080610ca8525080610abc52508061074052508061071f5250806105e9528061078c5250806102f4528061048e528061097e525080610577528061067b525080610882525080610ede5280610fdb525080610a805280610ce5525061114c6000f3fe6080604052600436106100965760003560e01c8063ab8f094511610069578063c2c4c5c11161004e578063c2c4c5c1146101c0578063c4d66de8146101c8578063d34fb2671461020857610096565b8063ab8f094514610194578063b0245225146101ab57610096565b8063094007071461009b5780631b88094d146100ed5780634b8200931461012b5780639c868ac01461017f575b600080fd5b3480156100a757600080fd5b506100db600480360360208110156100be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661021d565b60408051918252519081900360200190f35b3480156100f957600080fd5b506101026102ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561013757600080fd5b5061016b6004803603602081101561014e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166102cd565b604080519115158252519081900360200190f35b34801561018b57600080fd5b5061016b6102d3565b3480156101a057600080fd5b506101a96102dc565b005b3480156101b757600080fd5b506100db6103ad565b61016b61046c565b3480156101d457600080fd5b506101a9600480360360208110156101eb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610912565b34801561021457600080fd5b506101a9610966565b600073ffffffffffffffffffffffffffffffffffffffff821630146102a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461038057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac8288c06040518163ffffffff1660e01b815260040160606040518083038186803b15801561041957600080fd5b505afa15801561042d573d6000803e3d6000fd5b505050506040513d606081101561044357600080fd5b50805160208201516040909201519094509092509050610464838383610a34565b935050505090565b6000610476610a3a565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461051a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6002546000610527610a53565b90508082101561090457604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b1580156105be57600080fd5b505af11580156105d2573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610817578481111561062357610817565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b1580156106c257600080fd5b505af11580156106d6573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b5051905082851080159061070457508262093a800185105b156107bd57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089028161076857fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506107d29050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161060b565b50600284905560048054830190558115801590610837575060055460ff16155b1561090057604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b1580156108ca57600080fd5b505af11580156108de573d6000803e3d6000fd5b505050506040513d60208110156108f457600080fd5b50610900905082610a7e565b5050505b6001925050506102ca610e64565b61091a610e6b565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610a0a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b91020190565b610a4c60026000541415610190611073565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b505050506040513d6020811015610b5957600080fd5b5050604080517fac8288c000000000000000000000000000000000000000000000000000000000815290516000918291829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163ac8288c091600480820192606092909190829003018186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d6060811015610c1357600080fd5b508051602082015160409092015190945090925090506000610c36848484610a34565b9050803414610ca657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e636f7272656374206d73672e76616c756520706173736564000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d2ce7d65827f0000000000000000000000000000000000000000000000000000000000000000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898989896040516020018082815260200180602001828103825260008152602001602001925050506040516020818303038152906040526040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610df4578181015183820152602001610ddc565b50505050905090810190601f168015610e215780820380516001836020036101000a031916815260200191505b509750505050505050506000604051808303818588803b158015610e4457600080fd5b505af1158015610e58573d6000803e3d6000fd5b50505050505050505050565b6001600055565b60025415610eda57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4257600080fd5b505afa158015610f56573d6000803e3d6000fd5b505050506040513d6020811015610f6c57600080fd5b5051905080610fc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110f36024913960400191505060405180910390fd5b6001819055610fd3610a53565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d602081101561106b57600080fd5b505160035550565b816110815761108181611085565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a2646970667358221220b7cd2446ceecae6ae022e512fb528dc49009b7ea1f563ecff8743d815934d40a64736f6c63430007010033", + "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2401 CODESIZE SUB DUP1 PUSH3 0x2401 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x136 JUMP JUMPDEST ADDRESS PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP8 SWAP1 SHL AND PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD DUP6 SWAP1 DUP6 SWAP1 PUSH3 0x5C SWAP1 PUSH3 0x10A JUMP JUMPDEST PUSH3 0x69 SWAP3 SWAP2 SWAP1 PUSH3 0x1C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x86 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 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 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP5 DUP6 AND OR PUSH1 0x1 PUSH1 0x40 SHL PUSH1 0x1 PUSH1 0x80 SHL SUB NOT AND PUSH9 0x10000000000000000 SWAP4 DUP6 AND SWAP4 SWAP1 SWAP4 MUL SWAP3 SWAP1 SWAP3 OR PUSH1 0x1 PUSH1 0x80 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x80 SHL SWAP2 SWAP1 SWAP4 AND MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x1F4 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x16CC DUP1 PUSH3 0xD35 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH3 0x14F JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 MLOAD PUSH3 0x15C DUP2 PUSH3 0x1DB JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH3 0x16F DUP2 PUSH3 0x1DB JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH3 0x182 DUP2 PUSH3 0x1DB JUMP JUMPDEST SWAP4 POP PUSH3 0x193 DUP9 PUSH1 0x60 DUP10 ADD PUSH3 0x118 JUMP JUMPDEST SWAP3 POP PUSH3 0x1A4 DUP9 PUSH1 0x80 DUP10 ADD PUSH3 0x118 JUMP JUMPDEST SWAP2 POP PUSH3 0x1B5 DUP9 PUSH1 0xA0 DUP10 ADD PUSH3 0x118 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST 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 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0xB1A PUSH3 0x21B PUSH1 0x0 CODECOPY DUP1 PUSH2 0x234 MSTORE POP DUP1 PUSH2 0x1E4 MSTORE POP PUSH2 0xB1A 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 0xBE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xCE3CC8BD GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0xE9BDE604 EQ PUSH2 0x16E JUMPI DUP1 PUSH4 0xFA72CE95 EQ PUSH2 0x183 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0xAC8288C0 EQ PUSH2 0x137 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0xA7 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x11C JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x7D5D0D10 EQ PUSH2 0xE1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCB PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP2 SWAP1 PUSH2 0x9B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCB PUSH2 0xEF CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x102 CALLDATASIZE PUSH1 0x4 PUSH2 0x904 JUMP JUMPDEST PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP2 SWAP1 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x232 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x12A CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x256 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x41E JUMP JUMPDEST PUSH2 0x13F PUSH2 0x4AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA88 JUMP JUMPDEST PUSH2 0x161 PUSH2 0x15C CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP2 SWAP1 PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x181 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x944 JUMP JUMPDEST PUSH2 0x50E JUMP JUMPDEST STOP JUMPDEST PUSH2 0xCB PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x5FC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x215 SWAP3 SWAP2 SWAP1 PUSH2 0x989 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 PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B7 SWAP1 PUSH2 0xA1A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x2E3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x682 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x338 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x9B9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x366 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0x7B5A78AFEB182D33F2D682540E1DB4413EE8D4F1203A92C9EDF1F525057A9122 SWAP2 SWAP1 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x428 PUSH2 0x232 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x481 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x4A5 SWAP2 SWAP1 PUSH2 0x8C8 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 PUSH9 0x10000000000000000 DUP4 DIV DUP3 AND SWAP3 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x72F JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF AND PUSH9 0x10000000000000000 DUP6 DUP4 AND MUL OR PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 SWAP2 DUP5 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x3DB8F737EBEECF95C5DC9B279051CAB0E7B70A8E3D63148B38FAAFCF7D42314E SWAP1 PUSH2 0x5EF SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH2 0xA9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1B88094D 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x658 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x67C SWAP2 SWAP1 PUSH2 0x8C8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B7 SWAP1 PUSH2 0xA51 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x75E PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x775 PUSH2 0x76D DUP3 CALLER PUSH2 0x778 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x815 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x782 PUSH2 0x41E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7BE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x80E SWAP2 SWAP1 PUSH2 0x8E4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x823 JUMPI PUSH2 0x823 DUP2 PUSH2 0x827 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8BD JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x80E DUP2 PUSH2 0xAC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8D9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x80E DUP2 PUSH2 0xAC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8F5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x80E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x915 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x80E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x958 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x962 DUP6 DUP6 PUSH2 0x894 JUMP JUMPDEST SWAP3 POP PUSH2 0x971 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x894 JUMP JUMPDEST SWAP2 POP PUSH2 0x980 DUP6 PUSH1 0x40 DUP7 ADD PUSH2 0x894 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0xBC086FEDBB3591A5CDE8A99C00519AABCF4611656D6253ACA4A1A4 0xCB JUMPDEST BLOCKHASH 0xD PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER PUSH2 0x1E0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x16CC CODESIZE SUB DUP1 PUSH3 0x16CC DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xE6DEC36F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP4 SWAP5 SWAP3 SWAP4 DUP6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP3 PUSH4 0xE6DEC36F SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x115 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2C6F4D6F PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x58DE9ADE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x18A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x1A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 DUP2 SHL DUP3 AND PUSH1 0x80 MSTORE DUP6 DUP2 SHL DUP3 AND PUSH1 0xA0 MSTORE DUP7 DUP2 SHL DUP3 AND PUSH1 0xC0 MSTORE DUP3 SWAP1 SHL AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x227 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x23E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5C3DAB0B PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0xB87B5616 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x2A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x21609BBF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x21609BBF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x305 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x31A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3F7D6C7 PUSH1 0xE5 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x7EFAD8E0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x38D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x160 MSTORE POP POP PUSH1 0x0 NOT PUSH1 0x2 SSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 PUSH4 0xBDA009FE SWAP3 SWAP2 DUP7 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x416 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE MLOAD PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x48A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x4A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x180 MSTORE SWAP2 DUP2 SHL SWAP1 SWAP2 AND PUSH2 0x1A0 MSTORE CALLER SWAP1 SHL PUSH2 0x1C0 MSTORE POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x60 SHR PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH1 0x60 SHR PUSH2 0x114C PUSH3 0x580 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x3B5 MSTORE DUP1 PUSH2 0xBA2 MSTORE POP DUP1 PUSH2 0xCA8 MSTORE POP DUP1 PUSH2 0xABC MSTORE POP DUP1 PUSH2 0x740 MSTORE POP DUP1 PUSH2 0x71F MSTORE POP DUP1 PUSH2 0x5E9 MSTORE DUP1 PUSH2 0x78C MSTORE POP DUP1 PUSH2 0x2F4 MSTORE DUP1 PUSH2 0x48E MSTORE DUP1 PUSH2 0x97E MSTORE POP DUP1 PUSH2 0x577 MSTORE DUP1 PUSH2 0x67B MSTORE POP DUP1 PUSH2 0x882 MSTORE POP DUP1 PUSH2 0xEDE MSTORE DUP1 PUSH2 0xFDB MSTORE POP DUP1 PUSH2 0xA80 MSTORE DUP1 PUSH2 0xCE5 MSTORE POP PUSH2 0x114C PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x96 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB8F0945 GT PUSH2 0x69 JUMPI DUP1 PUSH4 0xC2C4C5C1 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x208 JUMPI PUSH2 0x96 JUMP JUMPDEST DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0xB0245225 EQ PUSH2 0x1AB JUMPI PUSH2 0x96 JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0x9B JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0xED JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x17F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x21D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x102 PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16B PUSH2 0x2D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x2DC JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB PUSH2 0x3AD JUMP JUMPDEST PUSH2 0x16B PUSH2 0x46C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x912 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x966 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x2A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x380 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAC8288C0 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x464 DUP4 DUP4 DUP4 PUSH2 0xA34 JUMP JUMPDEST SWAP4 POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x476 PUSH2 0xA3A JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x51A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x527 PUSH2 0xA53 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x904 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x817 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x623 JUMPI PUSH2 0x817 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x704 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x7BD JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x768 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x7D2 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x60B JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x837 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x900 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x900 SWAP1 POP DUP3 PUSH2 0xA7E JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x2CA PUSH2 0xE64 JUMP JUMPDEST PUSH2 0x91A PUSH2 0xE6B JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0xA0A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST SWAP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH2 0xA4C PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0x1073 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH32 0xAC8288C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xAC8288C0 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xC13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xC36 DUP5 DUP5 DUP5 PUSH2 0xA34 JUMP JUMPDEST SWAP1 POP DUP1 CALLVALUE EQ PUSH2 0xCA6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E636F7272656374206D73672E76616C756520706173736564000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2CE7D65 DUP3 PUSH32 0x0 PUSH1 0x5 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDF4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xDDC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE21 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP8 POP POP POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE58 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xEDA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xFC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x10F3 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xFD3 PUSH2 0xA53 JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1041 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1055 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x106B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0x1081 JUMPI PUSH2 0x1081 DUP2 PUSH2 0x1085 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB7 0xCD 0x24 CHAINID 0xCE 0xEC 0xAE PUSH11 0xE022E512FB528DC49009B7 0xEA 0x1F JUMP RETURNDATACOPY 0xCF 0xF8 PUSH21 0x3D815934D40A64736F6C6343000701003300000000 ", + "sourceMap": "1146:3582:60:-:0;;;1710:418;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1143:4:35;2049:46:33;;-1:-1:-1;;;;;;1162:14:35::1;::::0;;;;::::1;::::0;1968:44:60::1;::::0;1990:6;;1998:13;;1968:44:::1;::::0;::::1;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1945:20:60::1;:67:::0;;-1:-1:-1;;;;;;1945:67:60::1;-1:-1:-1::0;;;;;1945:67:60;;;::::1;::::0;;;::::1;::::0;;2023:9:::1;:20:::0;;-1:-1:-1;;;;;;2023:20:60::1;-1:-1:-1::0;;;;;2023:20:60;;::::1;;-1:-1:-1::0;;;;;;;;2053:20:60::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;;;;2083:38:60::1;-1:-1:-1::0;;;2083:38:60;;;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;1146:3582:60;;-1:-1:-1;;1146:3582:60;;;;;;;;;:::o;552:132:-1:-;629:13;;-1:-1;;;;;3199:30;;4422:34;;4412:2;;4470:1;;4460:12;4412:2;614:70;;;;:::o;691:1064::-;;;;;;;950:3;938:9;929:7;925:23;921:33;918:2;;;-1:-1;;957:12;918:2;480:6;474:13;492:48;534:5;492:48;:::i;:::-;1135:2;1208:22;;106:13;1009:89;;-1:-1;124:56;106:13;124:56;:::i;:::-;1277:2;1351:22;;294:13;1143:97;;-1:-1;312:57;294:13;312:57;:::i;:::-;1285:98;-1:-1;1438:63;1493:7;1420:2;1469:22;;1438:63;:::i;:::-;1428:73;;1557:63;1612:7;1538:3;1592:9;1588:22;1557:63;:::i;:::-;1547:73;;1676:63;1731:7;1657:3;1711:9;1707:22;1676:63;:::i;:::-;1666:73;;912:843;;;;;;;;:::o;2122:427::-;-1:-1;;;;;3072:54;;;1856:73;;3072:54;;2535:2;2520:18;;1856:73;2324:2;2309:18;;2295:254::o;3868:163::-;-1:-1;;;;;3072:54;;3950:58;;3940:2;;4022:1;;4012:12;3940:2;3934:97;:::o;:::-;1146:3582:60;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2297": [ + { + "length": 32, + "start": 484 + } + ], + "2486": [ + { + "length": 32, + "start": 564 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100be5760003560e01c8063aaabadc511610076578063ce3cc8bd1161005b578063ce3cc8bd1461014e578063e9bde6041461016e578063fa72ce9514610183576100be565b8063aaabadc51461012f578063ac8288c014610137576100be565b8063851c1bb3116100a7578063851c1bb3146100f45780638d928af8146101145780639ed933181461011c576100be565b806339312dee146100c35780637d5d0d10146100e1575b600080fd5b6100cb610196565b6040516100d891906109b9565b60405180910390f35b6100cb6100ef3660046108ac565b6101b2565b610107610102366004610904565b6101e0565b6040516100d891906109e5565b6100cb610232565b6100cb61012a3660046108ac565b610256565b6100cb61041e565b61013f6104aa565b6040516100d893929190610a88565b61016161015c3660046108ac565b6104e3565b6040516100d891906109da565b61018161017c366004610944565b61050e565b005b6100cb6101913660046108ac565b6105fc565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054165b919050565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610215929190610989565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff818116600090815260026020526040812054909116156102c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b790610a1a565b60405180910390fd5b600080546102e39073ffffffffffffffffffffffffffffffffffffffff16610682565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de8906103389086906004016109b9565b600060405180830381600087803b15801561035257600080fd5b505af1158015610366573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff818116600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255938716808352600290945280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517f7b5a78afeb182d33f2d682540e1db4413ee8d4f1203a92c9edf1f525057a91229190a392915050565b6000610428610232565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561046d57600080fd5b505afa158015610481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a591906108c8565b905090565b60035467ffffffffffffffff80821692680100000000000000008304821692700100000000000000000000000000000000900490911690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61051661072f565b600380547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff858116919091177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000085831602177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000918416919091021790556040517f3db8f737ebeecf95c5dc9b279051cab0e7b70a8e3d63148b38faafcf7d42314e906105ef90859085908590610a9e565b60405180910390a1505050565b60008173ffffffffffffffffffffffffffffffffffffffff16631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067c91906108c8565b92915050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff81166101db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b790610a51565b600061075e6000357fffffffff00000000000000000000000000000000000000000000000000000000166101e0565b905061077561076d8233610778565b610191610815565b50565b600061078261041e565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b81526004016107be939291906109ee565b60206040518083038186803b1580156107d657600080fd5b505afa1580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e91906108e4565b9392505050565b816108235761082381610827565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b803567ffffffffffffffff8116811461067c57600080fd5b6000602082840312156108bd578081fd5b813561080e81610ac2565b6000602082840312156108d9578081fd5b815161080e81610ac2565b6000602082840312156108f5578081fd5b8151801515811461080e578182fd5b600060208284031215610915578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461080e578182fd5b600080600060608486031215610958578182fd5b6109628585610894565b92506109718560208601610894565b91506109808560408601610894565b90509250925092565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b9283526020830191909152604082015260600190565b67ffffffffffffffff93841681529183166020830152909116604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461077557600080fdfea26469706673582212207abc086fedbb3591a5cde8a99c00519aabcf4611656d6253aca4a1a4cb5b400d64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xCE3CC8BD GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0xE9BDE604 EQ PUSH2 0x16E JUMPI DUP1 PUSH4 0xFA72CE95 EQ PUSH2 0x183 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0xAC8288C0 EQ PUSH2 0x137 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0xA7 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x11C JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x7D5D0D10 EQ PUSH2 0xE1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCB PUSH2 0x196 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP2 SWAP1 PUSH2 0x9B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCB PUSH2 0xEF CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x102 CALLDATASIZE PUSH1 0x4 PUSH2 0x904 JUMP JUMPDEST PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP2 SWAP1 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x232 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x12A CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x256 JUMP JUMPDEST PUSH2 0xCB PUSH2 0x41E JUMP JUMPDEST PUSH2 0x13F PUSH2 0x4AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA88 JUMP JUMPDEST PUSH2 0x161 PUSH2 0x15C CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD8 SWAP2 SWAP1 PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x181 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x944 JUMP JUMPDEST PUSH2 0x50E JUMP JUMPDEST STOP JUMPDEST PUSH2 0xCB PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x5FC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x215 SWAP3 SWAP2 SWAP1 PUSH2 0x989 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 PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B7 SWAP1 PUSH2 0xA1A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x2E3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x682 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x338 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x9B9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x366 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0x7B5A78AFEB182D33F2D682540E1DB4413EE8D4F1203A92C9EDF1F525057A9122 SWAP2 SWAP1 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x428 PUSH2 0x232 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x481 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x4A5 SWAP2 SWAP1 PUSH2 0x8C8 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 PUSH9 0x10000000000000000 DUP4 DIV DUP3 AND SWAP3 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x72F JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 SWAP1 SWAP2 OR PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF AND PUSH9 0x10000000000000000 DUP6 DUP4 AND MUL OR PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 SWAP2 DUP5 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x3DB8F737EBEECF95C5DC9B279051CAB0E7B70A8E3D63148B38FAAFCF7D42314E SWAP1 PUSH2 0x5EF SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH2 0xA9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1B88094D 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x658 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x67C SWAP2 SWAP1 PUSH2 0x8C8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B7 SWAP1 PUSH2 0xA51 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x75E PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x775 PUSH2 0x76D DUP3 CALLER PUSH2 0x778 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x815 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x782 PUSH2 0x41E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7BE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x80E SWAP2 SWAP1 PUSH2 0x8E4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x823 JUMPI PUSH2 0x823 DUP2 PUSH2 0x827 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8BD JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x80E DUP2 PUSH2 0xAC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8D9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x80E DUP2 PUSH2 0xAC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8F5 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x80E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x915 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x80E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x958 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x962 DUP6 DUP6 PUSH2 0x894 JUMP JUMPDEST SWAP3 POP PUSH2 0x971 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x894 JUMP JUMPDEST SWAP2 POP PUSH2 0x980 DUP6 PUSH1 0x40 DUP7 ADD PUSH2 0x894 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0xBC086FEDBB3591A5CDE8A99C00519AABCF4611656D6253ACA4A1A4 0xCB JUMPDEST BLOCKHASH 0xD PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1146:3582:60:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2235:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2662:153;;;;;;:::i;:::-;;:::i;2607:430:33:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1247:79:35:-;;;:::i;3844:456:60:-;;;;;;:::i;:::-;;:::i;1386:109:35:-;;;:::i;3127:319:60:-;;;:::i;:::-;;;;;;;;;:::i;2442:131::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4400:326::-;;;;;;:::i;:::-;;:::i;:::-;;2886:141;;;;;;:::i;:::-;;:::i;2235:117::-;2290:7;2324:20;;;2235:117;:::o;2662:153::-;2781:26;;;;2731:15;2781:26;;;:15;:26;;;;;;;2662:153;;;;:::o;2607:430:33:-;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;1247:79:35:-;1313:6;1247:79;:::o;3844:456:60:-;3933:40;:26;;;3906:7;3933:26;;;:15;:26;;;;;;3906:7;;3933:26;:40;3925:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4009:13;4046:20;;4025:43;;4046:20;;4025:12;:43::i;:::-;4079:46;;;;;4009:59;;-1:-1:-1;4079:35:60;;;;;;:46;;4115:9;;4079:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4136:26:60;;;;;;;;4165:4;4136:26;;;;;;;;:33;;;;;;;;;;4179:26;;;;;;:15;:26;;;;;;:34;;;;;;;;4228:42;;;4136:26;4228:42;4288:5;3844:456;-1:-1:-1;;3844:456:60:o;1386:109:35:-;1432:11;1462:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1455:33;;1386:109;:::o;3127:319:60:-;3352:9;;;;;;;3382;;;;;;3421:18;;;;;;;3127:319::o;2442:131::-;2540:26;;2517:4;2540:26;;;:19;:26;;;;;;;;;2442:131::o;4400:326::-;2276:21:33;:19;:21::i;:::-;4547:9:60::1;:20:::0;;;::::1;;::::0;;::::1;::::0;;;::::1;4577::::0;::::1;::::0;;;::::1;;;4607:38:::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;4660:59:::1;::::0;::::1;::::0;::::1;::::0;4547:20;;4577;;4607:38;;4660:59:::1;:::i;:::-;;;;;;;;4400:326:::0;;;:::o;2886:141::-;2951:7;2999:5;2977:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2970:50;2886:141;-1:-1:-1;;2886:141:60:o;1001:515:38:-;1058:16;1126:4;1120:11;1156:66;1151:3;1144:79;1269:14;1263:4;1259:25;1252:4;1247:3;1243:14;1236:49;1321:66;1314:4;1309:3;1305:14;1298:90;1428:4;1423:3;1420:1;1413:20;1401:32;-1:-1:-1;;1460:22:38;;;1452:57;;;;;;;;;;;;:::i;2420:181:33:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9040:3:20;2524:8:33;:70::i;:::-;2420:181;:::o;1501:178:35:-;1589:4;1612:15;:13;:15::i;:::-;:26;;;1639:8;1649:7;1666:4;1612:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1605:67;1501:178;-1:-1:-1;;;1501:178:35:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;1074:3172::-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14;734:128:-1;800:20;;9844:18;9833:30;;11638:34;;11628:2;;11686:1;;11676:12;869:241;;973:2;961:9;952:7;948:23;944:32;941:2;;;-1:-1;;979:12;941:2;85:6;72:20;97:33;124:5;97:33;:::i;1117:263::-;;1232:2;1220:9;1211:7;1207:23;1203:32;1200:2;;;-1:-1;;1238:12;1200:2;226:6;220:13;238:33;265:5;238:33;:::i;1387:257::-;;1499:2;1487:9;1478:7;1474:23;1470:32;1467:2;;;-1:-1;;1505:12;1467:2;364:6;358:13;11257:5;9191:13;9184:21;11235:5;11232:32;11222:2;;-1:-1;;11268:12;1651:239;;1754:2;1742:9;1733:7;1729:23;1725:32;1722:2;;;-1:-1;;1760:12;1722:2;497:6;484:20;9368:66;11379:5;9357:78;11355:5;11352:34;11342:2;;-1:-1;;11390:12;2207:485;;;;2342:2;2330:9;2321:7;2317:23;2313:32;2310:2;;;-1:-1;;2348:12;2310:2;2410:52;2454:7;2430:22;2410:52;:::i;:::-;2400:62;;2517:52;2561:7;2499:2;2541:9;2537:22;2517:52;:::i;:::-;2507:62;;2624:52;2668:7;2606:2;2648:9;2644:22;2624:52;:::i;:::-;2614:62;;2304:388;;;;;:::o;4790:387::-;3001:37;;;9368:66;9357:78;5041:2;5032:12;;3296:56;5141:11;;;4932:245::o;5184:222::-;9638:42;9627:54;;;;2770:37;;5311:2;5296:18;;5282:124::o;5413:210::-;9191:13;;9184:21;2884:34;;5534:2;5519:18;;5505:118::o;5630:222::-;3001:37;;;5757:2;5742:18;;5728:124::o;5859:444::-;3001:37;;;9638:42;9627:54;;;6206:2;6191:18;;2770:37;9627:54;6289:2;6274:18;;2770:37;6042:2;6027:18;;6013:290::o;7113:416::-;7313:2;7327:47;;;4104:2;7298:18;;;8959:19;4140:22;8999:14;;;4120:43;4182:12;;;7284:245::o;7536:416::-;7736:2;7750:47;;;4433:2;7721:18;;;8959:19;4469:24;8999:14;;;4449:45;4513:12;;;7707:245::o;7959:444::-;3001:37;;;8306:2;8291:18;;3001:37;;;;8389:2;8374:18;;3001:37;8142:2;8127:18;;8113:290::o;8410:438::-;9844:18;9833:30;;;4729:49;;9833:30;;;8752:2;8737:18;;4729:49;9833:30;;;8834:2;8819:18;;4729:49;8590:2;8575:18;;8561:287::o;11052:117::-;9638:42;11139:5;9627:54;11114:5;11111:35;11101:2;;11160:1;;11150:12" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getActionId(bytes4)": "851c1bb3", + "getArbitrumFees()": "ac8288c0", + "getAuthorizer()": "aaabadc5", + "getGaugeImplementation()": "39312dee", + "getGaugeRecipient(address)": "fa72ce95", + "getRecipientGauge(address)": "7d5d0d10", + "getVault()": "8d928af8", + "isGaugeFromFactory(address)": "ce3cc8bd", + "setArbitrumFees(uint64,uint64,uint64)": "e9bde604" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerMinter\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"contract IGatewayRouter\",\"name\":\"gatewayRouter\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasPrice\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSubmissionCost\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"name\":\"ArbitrumFeesModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ArbitrumRootGaugeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArbitrumFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"getRecipientGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasPrice\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSubmissionCost\",\"type\":\"uint64\"}],\"name\":\"setArbitrumFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(address)\":{\"details\":\"Care must be taken to ensure that gauges deployed from this factory are suitable before they are added to the GaugeController.\",\"params\":{\"recipient\":\"The address to receive BAL minted from the gauge\"},\"returns\":{\"_0\":\"The address of the deployed gauge\"}},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create(address)\":{\"notice\":\"Deploys a new gauge which bridges all of its BAL allowance to a single recipient on Polygon.\"},\"getArbitrumFees()\":{\"notice\":\"Set the fees for the Arbitrum side of the bridging transaction\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getGaugeImplementation()\":{\"notice\":\"Returns the address of the implementation used for gauge deployments.\"},\"getGaugeRecipient(address)\":{\"notice\":\"Returns the recipient of `gauge`.\"},\"getRecipientGauge(address)\":{\"notice\":\"Returns the gauge which sends funds to `recipient`.\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"},\"setArbitrumFees(uint64,uint64,uint64)\":{\"notice\":\"Set the fees for the Arbitrum side of the bridging transaction\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/arbitrum/ArbitrumRootGaugeFactory.sol\":\"ArbitrumRootGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":{\"keccak256\":\"0x0ef386c5d211024ce07fd77245128db56fdfd2aae7e5e4232b72fb0cecb6be03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f09b20288f085f7a2ce289a8b1676d2d873e76a25929fbd9328e2d722225b5\",\"dweb:/ipfs/QmbVW5u6dSXsTBb66tKHS9QN5RPonEcpNzAjJ1nBe8UVRi\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]},\"contracts/gauges/arbitrum/ArbitrumRootGauge.sol\":{\"keccak256\":\"0x575c96cbfeaf36fedf67b6ac19915902ffca9b33fbca973c6a83f907fdf08320\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1227cb056b5100ce5b347c1af562e93d6503fd92f2c6caaeadfdb3d47d12e5af\",\"dweb:/ipfs/QmUzQezbR6135U1CbBYqE2ommM3gGCCXZXdHrTZxRSdExG\"]},\"contracts/gauges/arbitrum/ArbitrumRootGaugeFactory.sol\":{\"keccak256\":\"0x869bfa70b97898dfc28880ffb18947eba9a808c9bb92ea8bdb01709c33f645ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecc77f66eb365fe79a3b14d53b7664489160297f6b03d310e9b4a75c27369d03\",\"dweb:/ipfs/QmegCzZRjVoqXXBtBJb4RPtN968jGUVvWqWeT3thoiEJHg\"]},\"contracts/gauges/arbitrum/IArbitrumFeeProvider.sol\":{\"keccak256\":\"0xa8e72265518220c6c379b069a760221a368eb77477bba74778717ded9b32ab1d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9f3f81476872c30200b393a699a35a042863bf9f3ab431f5473eee12db2ab8a\",\"dweb:/ipfs/QmemNU9eK9aATZLKi4qwRixzwmfHesBN6sgteiRj8HmHbW\"]},\"contracts/gauges/arbitrum/IGatewayRouter.sol\":{\"keccak256\":\"0x18111553a1164746a16d3143d5b8bf2e15f825eefcbe0a987539cebde460a0f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8b5dc6100de63234a9543ff772cfeaa26d004b3838f2173e233ecf4ead0df976\",\"dweb:/ipfs/QmZwLoAmyzXmRF5RoJyb3AHvyTWEuaJNX8oLTXF6k7jD5W\"]}},\"version\":1}" + } + }, + "contracts/gauges/arbitrum/IArbitrumFeeProvider.sol": { + "IArbitrumFeeProvider": { + "abi": [ + { + "inputs": [], + "name": "getArbitrumFees", + "outputs": [ + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSubmissionCost", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getArbitrumFees()": "ac8288c0" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getArbitrumFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/arbitrum/IArbitrumFeeProvider.sol\":\"IArbitrumFeeProvider\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"contracts/gauges/arbitrum/IArbitrumFeeProvider.sol\":{\"keccak256\":\"0xa8e72265518220c6c379b069a760221a368eb77477bba74778717ded9b32ab1d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9f3f81476872c30200b393a699a35a042863bf9f3ab431f5473eee12db2ab8a\",\"dweb:/ipfs/QmemNU9eK9aATZLKi4qwRixzwmfHesBN6sgteiRj8HmHbW\"]}},\"version\":1}" + } + }, + "contracts/gauges/arbitrum/IGatewayRouter.sol": { + "IGatewayRouter": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getGateway", + "outputs": [ + { + "internalType": "address", + "name": "gateway", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "outboundTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getGateway(address)": "bda009fe", + "outboundTransfer(address,address,uint256,uint256,uint256,bytes)": "d2ce7d65" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"gateway\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"outboundTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/arbitrum/IGatewayRouter.sol\":\"IGatewayRouter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"contracts/gauges/arbitrum/IGatewayRouter.sol\":{\"keccak256\":\"0x18111553a1164746a16d3143d5b8bf2e15f825eefcbe0a987539cebde460a0f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8b5dc6100de63234a9543ff772cfeaa26d004b3838f2173e233ecf4ead0df976\",\"dweb:/ipfs/QmZwLoAmyzXmRF5RoJyb3AHvyTWEuaJNX8oLTXF6k7jD5W\"]}},\"version\":1}" + } + }, + "contracts/gauges/ethereum/LiquidityGaugeFactory.sol": { + "LiquidityGaugeFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "gauge", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "GaugeCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeImplementation", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60a060405234801561001057600080fd5b5060405161054b38038061054b83398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c6104b86100936000398060b7528061014a52506104b86000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806339312dee146100515780639ed933181461006f578063a8ea687514610082578063ce3cc8bd14610095575b600080fd5b6100596100b5565b60405161006691906103e8565b60405180910390f35b61005961007d3660046103ad565b6100d9565b6100596100903660046103ad565b6102aa565b6100a86100a33660046103ad565b6102d5565b6040516100669190610409565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604081205490911615610143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013a90610414565b60405180910390fd5b600061016e7f0000000000000000000000000000000000000000000000000000000000000000610300565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de8906101c39086906004016103e8565b600060405180830381600087803b1580156101dd57600080fd5b505af11580156101f1573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff81811660008181526020818152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091559488168084529490915280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fbc0aff029cf899fe358381e295caa21dd2e8c1a6607e2b9e6c7ec915db15bd539190a390505b919050565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600160205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff81166102a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013a9061044b565b6000602082840312156103be578081fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103e1578182fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c65640000000000000000000060408201526060019056fea2646970667358221220682b184bbaef33b78adf0c79a5411551cedee640bb5c31f79b69253763287a6364736f6c63430007010033", + "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x54B CODESIZE SUB DUP1 PUSH2 0x54B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x44 JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x80 MSTORE PUSH2 0x72 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x6B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH2 0x4B8 PUSH2 0x93 PUSH1 0x0 CODECOPY DUP1 PUSH1 0xB7 MSTORE DUP1 PUSH2 0x14A MSTORE POP PUSH2 0x4B8 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 0x39312DEE EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x95 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xB5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x3AD JUMP JUMPDEST PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x59 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x3AD JUMP JUMPDEST PUSH2 0x2AA JUMP JUMPDEST PUSH2 0xA8 PUSH2 0xA3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3AD JUMP JUMPDEST PUSH2 0x2D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x409 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x143 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13A SWAP1 PUSH2 0x414 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16E PUSH32 0x0 PUSH2 0x300 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x1C3 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xBC0AFF029CF899FE358381E295CAA21DD2E8C1A6607E2B9E6C7EC915DB15BD53 SWAP2 SWAP1 LOG3 SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x2A5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13A SWAP1 PUSH2 0x44B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3E1 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x2B184BBAEF33B78ADF 0xC PUSH26 0xA5411551CEDEE640BB5C31F79B69253763287A6364736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1012:2050:63:-:0;;;1317:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1362:28;;-1:-1:-1;;;;;;1362:28:63;;;1012:2050;;192:309:-1;;330:2;318:9;309:7;305:23;301:32;298:2;;;-1:-1;;336:12;298:2;106:13;;-1:-1;;;;;789:54;;937:58;;927:2;;-1:-1;;999:12;927:2;388:97;292:209;-1:-1;;;292:209::o;:::-;1012:2050:63;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "10436": [ + { + "length": 32, + "start": 183 + }, + { + "length": 32, + "start": 330 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c806339312dee146100515780639ed933181461006f578063a8ea687514610082578063ce3cc8bd14610095575b600080fd5b6100596100b5565b60405161006691906103e8565b60405180910390f35b61005961007d3660046103ad565b6100d9565b6100596100903660046103ad565b6102aa565b6100a86100a33660046103ad565b6102d5565b6040516100669190610409565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604081205490911615610143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013a90610414565b60405180910390fd5b600061016e7f0000000000000000000000000000000000000000000000000000000000000000610300565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de8906101c39086906004016103e8565b600060405180830381600087803b1580156101dd57600080fd5b505af11580156101f1573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff81811660008181526020818152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091559488168084529490915280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fbc0aff029cf899fe358381e295caa21dd2e8c1a6607e2b9e6c7ec915db15bd539190a390505b919050565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600160205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff81166102a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013a9061044b565b6000602082840312156103be578081fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146103e1578182fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c65640000000000000000000060408201526060019056fea2646970667358221220682b184bbaef33b78adf0c79a5411551cedee640bb5c31f79b69253763287a6364736f6c63430007010033", + "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 0x39312DEE EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x95 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xB5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x3AD JUMP JUMPDEST PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x59 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x3AD JUMP JUMPDEST PUSH2 0x2AA JUMP JUMPDEST PUSH2 0xA8 PUSH2 0xA3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3AD JUMP JUMPDEST PUSH2 0x2D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x409 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x143 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13A SWAP1 PUSH2 0x414 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x16E PUSH32 0x0 PUSH2 0x300 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x1C3 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xBC0AFF029CF899FE358381E295CAA21DD2E8C1A6607E2B9E6C7EC915DB15BD53 SWAP2 SWAP1 LOG3 SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x2A5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13A SWAP1 PUSH2 0x44B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3E1 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x2B184BBAEF33B78ADF 0xC PUSH26 0xA5411551CEDEE640BB5C31F79B69253763287A6364736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1012:2050:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1504:116;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2646:414;;;;;;:::i;:::-;;:::i;1711:133::-;;;;;;:::i;:::-;;:::i;1934:131::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1504:116::-;1593:20;1504:116;:::o;2646:414::-;2730:30;:16;;;2703:7;2730:16;;;:10;:16;;;;;;2703:7;;2730:16;:30;2722:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2796:13;2812:43;2833:20;2812:12;:43::i;:::-;2866:46;;;;;2796:59;;-1:-1:-1;2866:40:63;;;;;;:46;;2907:4;;2866:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2923:26:63;;;;:19;:26;;;;;;;;;;;:33;;;;2952:4;2923:33;;;;;;2966:16;;;;;;;;;;;;;:24;;;;;;;;3005:25;;;2923:19;3005:25;3048:5;-1:-1:-1;2646:414:63;;;;:::o;1711:133::-;1820:16;;;;1770:15;1820:16;;;:10;:16;;;;;;;;1711:133::o;1934:131::-;2032:26;;2009:4;2032:26;;;;;;;;;;;;;;1934:131::o;1001:515:38:-;1058:16;1126:4;1120:11;1156:66;1151:3;1144:79;1269:14;1263:4;1259:25;1252:4;1247:3;1243:14;1236:49;1321:66;1314:4;1309:3;1305:14;1298:90;1428:4;1423:3;1420:1;1413:20;1401:32;-1:-1:-1;;1460:22:38;;;1452:57;;;;;;;;;;;;:::i;142:241:-1:-;;246:2;234:9;225:7;221:23;217:32;214:2;;;-1:-1;;252:12;214:2;85:6;72:20;3462:42;3916:5;3451:54;3891:5;3888:35;3878:2;;-1:-1;;3927:12;3878:2;304:63;208:175;-1:-1;;;208:175::o;1460:222::-;3462:42;3451:54;;;;461:37;;1587:2;1572:18;;1558:124::o;1689:210::-;3363:13;;3356:21;575:34;;1810:2;1795:18;;1781:118::o;2181:416::-;2381:2;2395:47;;;1025:2;2366:18;;;3131:19;1061:22;3171:14;;;1041:43;1103:12;;;2352:245::o;2604:416::-;2804:2;2818:47;;;1354:2;2789:18;;;3131:19;1390:24;3171:14;;;1370:45;1434:12;;;2775:245::o" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getGaugeImplementation()": "39312dee", + "getPoolGauge(address)": "a8ea6875", + "isGaugeFromFactory(address)": "ce3cc8bd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"gauge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"GaugeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeImplementation\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(address)\":{\"details\":\"As anyone can register arbitrary Balancer pools with the Vault, it's impossible to prove onchain that `pool` is a \\\"valid\\\" deployment. Care must be taken to ensure that gauges deployed from this factory are suitable before they are added to the GaugeController. This factory disallows deploying multiple gauges for a single pool.\",\"params\":{\"pool\":\"The address of the pool for which to deploy a gauge\"},\"returns\":{\"_0\":\"The address of the deployed gauge\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create(address)\":{\"notice\":\"Deploys a new gauge for a Balancer pool.\"},\"getGaugeImplementation()\":{\"notice\":\"Returns the address of the implementation used for gauge deployments.\"},\"getPoolGauge(address)\":{\"notice\":\"Returns the address of the gauge belonging to `pool`.\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/ethereum/LiquidityGaugeFactory.sol\":\"LiquidityGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":{\"keccak256\":\"0x0c992c65f6cf48ce430d14518b1c402faf11f50fc3683321ea7dfb808eb3f3a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9d182e07a81d3444297d6a751c2a68ddf05b4f1b16c962ef0fe5389f1674309\",\"dweb:/ipfs/QmQYKQ1YecKzkGGrVxjexGEoxU8BPojfJCsNKp5VgYRFtA\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol\":{\"keccak256\":\"0xd65a23d87f8e22666d447cc91b2827622c652d074af328fa2d21d7b5a2a3f9dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88879d955c8720f8128dbc345336c74185474d7d41ff1327c298b4389c501c73\",\"dweb:/ipfs/QmSWfrTMxF7WpGX8e4oxjzP97smNE2SB9yE8rMLfPM8NYB\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":{\"keccak256\":\"0x0ef386c5d211024ce07fd77245128db56fdfd2aae7e5e4232b72fb0cecb6be03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f09b20288f085f7a2ce289a8b1676d2d873e76a25929fbd9328e2d722225b5\",\"dweb:/ipfs/QmbVW5u6dSXsTBb66tKHS9QN5RPonEcpNzAjJ1nBe8UVRi\"]},\"contracts/gauges/ethereum/LiquidityGaugeFactory.sol\":{\"keccak256\":\"0x479c35899feb8809ca890ff7b4ba59e9cba4f1bef4fc9963245e1df98a900a55\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b653f2f5309653807dca81e2bdc23166d77e36b97fc1de2f257a24ba31a96a5\",\"dweb:/ipfs/QmU3JwAFsZpyUpWwoqjucJpjWKxuGAGLyBjb9T422FWaCk\"]}},\"version\":1}" + } + }, + "contracts/gauges/ethereum/SingleRecipientGauge.sol": { + "SingleRecipientGauge": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IBalancerMinter", + "name": "minter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "periodTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodEmissions", + "type": "uint256" + } + ], + "name": "Checkpoint", + "type": "event" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6101806040523480156200001257600080fd5b50604051620012a4380380620012a4833981810160405260208110156200003857600080fd5b5051600160009081556040805163e6dec36f60e01b815290518392916001600160a01b0384169163e6dec36f91600480820192602092909190829003018186803b1580156200008657600080fd5b505afa1580156200009b573d6000803e3d6000fd5b505050506040513d6020811015620000b257600080fd5b50516040805163c003969960e01b815290519192506000916001600160a01b0384169163c0039699916004808301926020929190829003018186803b158015620000fb57600080fd5b505afa15801562000110573d6000803e3d6000fd5b505050506040513d60208110156200012757600080fd5b505160408051632c6f4d6f60e11b815290519192506000916001600160a01b038616916358de9ade916004808301926020929190829003018186803b1580156200017057600080fd5b505afa15801562000185573d6000803e3d6000fd5b505050506040513d60208110156200019c57600080fd5b50516001600160601b0319606084811b821660805285811b821660a05286811b821660c05282901b1660e052604080516303e1469160e61b815290519192506001600160a01b0383169163f851a44091600480820192602092909190829003018186803b1580156200020d57600080fd5b505afa15801562000222573d6000803e3d6000fd5b505050506040513d60208110156200023957600080fd5b505160601b6001600160601b0319166101005260408051635c3dab0b60e11b815290516001600160a01b0385169163b87b5616916004808301926020929190829003018186803b1580156200028d57600080fd5b505afa158015620002a2573d6000803e3d6000fd5b505050506040513d6020811015620002b957600080fd5b505161012052604080516321609bbf60e01b815290516001600160a01b038516916321609bbf916004808301926020929190829003018186803b1580156200030057600080fd5b505afa15801562000315573d6000803e3d6000fd5b505050506040513d60208110156200032c57600080fd5b505161014052604080516303f7d6c760e51b815290516001600160a01b03851691637efad8e0916004808301926020929190829003018186803b1580156200037357600080fd5b505afa15801562000388573d6000803e3d6000fd5b505050506040513d60208110156200039f57600080fd5b505161016052505060001960025550505060805160601c60a05160601c60c05160601c60e05160601c6101005160601c610120516101405161016051610e6e62000436600039806106515250806106305250806104fa528061069d5250806102c4528061039f528061088f525080610488528061058c525080610793525080610a525280610b4f5250806109a75250610e6e6000f3fe60806040526004361061007b5760003560e01c8063ab8f09451161004e578063ab8f094514610179578063c2c4c5c114610190578063c4d66de814610198578063d34fb267146101d85761007b565b806309400707146100805780631b88094d146100d25780634b820093146101105780639c868ac014610164575b600080fd5b34801561008c57600080fd5b506100c0600480360360208110156100a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ed565b60408051918252519081900360200190f35b3480156100de57600080fd5b506100e761027b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011c57600080fd5b506101506004803603602081101561013357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661029d565b604080519115158252519081900360200190f35b34801561017057600080fd5b506101506102a3565b34801561018557600080fd5b5061018e6102ac565b005b61015061037d565b3480156101a457600080fd5b5061018e600480360360208110156101bb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610823565b3480156101e457600080fd5b5061018e610877565b600073ffffffffffffffffffffffffffffffffffffffff8216301461027357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461035057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000610387610945565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461042b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600254600061043861095e565b90508082101561081557604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b1580156104cf57600080fd5b505af11580156104e3573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610728578481111561053457610728565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b1580156105d357600080fd5b505af11580156105e7573d6000803e3d6000fd5b505050506040513d60208110156105fd57600080fd5b5051905082851080159061061557508262093a800185105b156106ce57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089028161067957fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506106e39050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161051c565b50600284905560048054830190558115801590610748575060055460ff16155b1561081157604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b1580156107db57600080fd5b505af11580156107ef573d6000803e3d6000fd5b505050506040513d602081101561080557600080fd5b50610811905082610989565b5050505b60019250505061029a6109d8565b61082b6109df565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461091b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61095760026000541415610190610be7565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b6005546109d59073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169161010090041683610bf9565b50565b6001600055565b60025415610a4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ab657600080fd5b505afa158015610aca573d6000803e3d6000fd5b505050506040513d6020811015610ae057600080fd5b5051905080610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610e156024913960400191505060405180910390fd5b6001819055610b4761095e565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bb557600080fd5b505af1158015610bc9573d6000803e3d6000fd5b505050506040513d6020811015610bdf57600080fd5b505160035550565b81610bf557610bf581610c8b565b5050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610c86908490610cf8565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310610d6157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d24565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b50915091506000821415610de0573d6000803e3d6000fd5b610e0e815160001480610e065750818060200190516020811015610e0357600080fd5b50515b6101a2610be7565b5050505056fe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a26469706673582212207de17480f034aeea4f7ab6bc6e5e8e1b17e7755fbc88dc2401aaeb68fddd98a564736f6c63430007010033", + "opcodes": "PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x12A4 CODESIZE SUB DUP1 PUSH3 0x12A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xE6DEC36F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xE6DEC36F SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x110 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2C6F4D6F PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x58DE9ADE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 DUP2 SHL DUP3 AND PUSH1 0x80 MSTORE DUP6 DUP2 SHL DUP3 AND PUSH1 0xA0 MSTORE DUP7 DUP2 SHL DUP3 AND PUSH1 0xC0 MSTORE DUP3 SWAP1 SHL AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x222 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5C3DAB0B PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0xB87B5616 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x2A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x21609BBF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x21609BBF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x300 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x315 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3F7D6C7 PUSH1 0xE5 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x7EFAD8E0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x388 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x160 MSTORE POP POP PUSH1 0x0 NOT PUSH1 0x2 SSTORE POP POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0xE6E PUSH3 0x436 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x651 MSTORE POP DUP1 PUSH2 0x630 MSTORE POP DUP1 PUSH2 0x4FA MSTORE DUP1 PUSH2 0x69D MSTORE POP DUP1 PUSH2 0x2C4 MSTORE DUP1 PUSH2 0x39F MSTORE DUP1 PUSH2 0x88F MSTORE POP DUP1 PUSH2 0x488 MSTORE DUP1 PUSH2 0x58C MSTORE POP DUP1 PUSH2 0x793 MSTORE POP DUP1 PUSH2 0xA52 MSTORE DUP1 PUSH2 0xB4F MSTORE POP DUP1 PUSH2 0x9A7 MSTORE POP PUSH2 0xE6E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB8F0945 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x179 JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x1D8 JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x164 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1ED JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE7 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x150 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x150 PUSH2 0x2A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH2 0x2AC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x150 PUSH2 0x37D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x823 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH2 0x877 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x273 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x350 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x387 PUSH2 0x945 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x42B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x438 PUSH2 0x95E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x815 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x728 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x534 JUMPI PUSH2 0x728 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x615 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x6CE JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x679 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x6E3 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x51C JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x748 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x811 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x811 SWAP1 POP DUP3 PUSH2 0x989 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x29A PUSH2 0x9D8 JUMP JUMPDEST PUSH2 0x82B PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x91B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x957 PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xBE7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x9D5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP2 PUSH2 0x100 SWAP1 DIV AND DUP4 PUSH2 0xBF9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xA4E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xB3A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xE15 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xB47 PUSH2 0x95E JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBC9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0xBF5 JUMPI PUSH2 0xBF5 DUP2 PUSH2 0xC8B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xC86 SWAP1 DUP5 SWAP1 PUSH2 0xCF8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD61 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD24 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDC3 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 0xDC8 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xDE0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0xE0E DUP2 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0xE06 JUMPI POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1A2 PUSH2 0xBE7 JUMP JUMPDEST POP POP POP POP JUMP INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0xE17480F034AEEA4F7AB6BC6E5E8E1B17E7755FBC88DC2401AAEB68FDDD98 0xA5 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "920:703:64:-:0;;;1063:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1063:123:64;2070:1:44;2175:7;:22;;;2149:30:58;;;-1:-1:-1;2149:30:58;;;;1063:123:64;;2175:7:44;-1:-1:-1;2149:28:58;;;-1:-1:-1;;2149:30:58;;;;;1063:123:64;;2149:30:58;;;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2149:30:58;2208:29;;;-1:-1:-1;2208:29:58;;;;2149:30;;-1:-1:-1;2190:15:58;;-1:-1:-1;2208:27:58;;;-1:-1:-1;;2208:29:58;;;;;2149:30;;2208:29;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2208:29:58;2282:27;;;-1:-1:-1;2282:27:58;;;;2208:29;;-1:-1:-1;2247:32:58;;-1:-1:-1;2282:25:58;;;;;:27;;;;;2208:29;;2282:27;;;;;;;:25;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2282:27:58;-1:-1:-1;;2320:20:58;;;;;;;2350:24;;;;;;;2384:16;;;;;;;2410:34;;;;;;2475:23;;;-1:-1:-1;2475:23:58;;;;2282:27;;-1:-1:-1;;2410:34:58;;;2475:21;;:23;;;;;2282:27;;2475:23;;;;;;;;2410:34;2475:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2475:23:58;2454:44;;-1:-1:-1;2454:44:58;;;2532:32;;;-1:-1:-1;2532:32:58;;;;-1:-1:-1;2532:30:58;;;;;:32;;;;;2475:23;;2532:32;;;;;;;:30;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2532:32:58;2509:55;;2604:39;;;-1:-1:-1;2604:39:58;;;;-1:-1:-1;2604:37:58;;;-1:-1:-1;;2604:39:58;;;;;2532:32;;2604:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2604:39:58;2574:69;;2673:29;;;-1:-1:-1;2673:29:58;;;;-1:-1:-1;2673:27:58;;;;;:29;;;;;2604:39;;2673:29;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2673:29:58;2653:49;;-1:-1:-1;;;;2863:7:58;:27;-1:-1:-1;;;920:703:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "9490": [ + { + "length": 32, + "start": 2471 + } + ], + "9492": [ + { + "length": 32, + "start": 2642 + }, + { + "length": 32, + "start": 2895 + } + ], + "9494": [ + { + "length": 32, + "start": 1939 + } + ], + "9496": [ + { + "length": 32, + "start": 1160 + }, + { + "length": 32, + "start": 1420 + } + ], + "9498": [ + { + "length": 32, + "start": 708 + }, + { + "length": 32, + "start": 927 + }, + { + "length": 32, + "start": 2191 + } + ], + "9506": [ + { + "length": 32, + "start": 1274 + }, + { + "length": 32, + "start": 1693 + } + ], + "9508": [ + { + "length": 32, + "start": 1584 + } + ], + "9510": [ + { + "length": 32, + "start": 1617 + } + ] + }, + "linkReferences": {}, + "object": "60806040526004361061007b5760003560e01c8063ab8f09451161004e578063ab8f094514610179578063c2c4c5c114610190578063c4d66de814610198578063d34fb267146101d85761007b565b806309400707146100805780631b88094d146100d25780634b820093146101105780639c868ac014610164575b600080fd5b34801561008c57600080fd5b506100c0600480360360208110156100a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ed565b60408051918252519081900360200190f35b3480156100de57600080fd5b506100e761027b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011c57600080fd5b506101506004803603602081101561013357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661029d565b604080519115158252519081900360200190f35b34801561017057600080fd5b506101506102a3565b34801561018557600080fd5b5061018e6102ac565b005b61015061037d565b3480156101a457600080fd5b5061018e600480360360208110156101bb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610823565b3480156101e457600080fd5b5061018e610877565b600073ffffffffffffffffffffffffffffffffffffffff8216301461027357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461035057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000610387610945565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461042b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600254600061043861095e565b90508082101561081557604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b1580156104cf57600080fd5b505af11580156104e3573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610728578481111561053457610728565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b1580156105d357600080fd5b505af11580156105e7573d6000803e3d6000fd5b505050506040513d60208110156105fd57600080fd5b5051905082851080159061061557508262093a800185105b156106ce57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089028161067957fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506106e39050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161051c565b50600284905560048054830190558115801590610748575060055460ff16155b1561081157604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b1580156107db57600080fd5b505af11580156107ef573d6000803e3d6000fd5b505050506040513d602081101561080557600080fd5b50610811905082610989565b5050505b60019250505061029a6109d8565b61082b6109df565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461091b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61095760026000541415610190610be7565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b6005546109d59073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169161010090041683610bf9565b50565b6001600055565b60025415610a4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ab657600080fd5b505afa158015610aca573d6000803e3d6000fd5b505050506040513d6020811015610ae057600080fd5b5051905080610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610e156024913960400191505060405180910390fd5b6001819055610b4761095e565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bb557600080fd5b505af1158015610bc9573d6000803e3d6000fd5b505050506040513d6020811015610bdf57600080fd5b505160035550565b81610bf557610bf581610c8b565b5050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610c86908490610cf8565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310610d6157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d24565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b50915091506000821415610de0573d6000803e3d6000fd5b610e0e815160001480610e065750818060200190516020811015610e0357600080fd5b50515b6101a2610be7565b5050505056fe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a26469706673582212207de17480f034aeea4f7ab6bc6e5e8e1b17e7755fbc88dc2401aaeb68fddd98a564736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB8F0945 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x179 JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x1D8 JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x164 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1ED JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE7 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x150 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x150 PUSH2 0x2A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH2 0x2AC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x150 PUSH2 0x37D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x823 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH2 0x877 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x273 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x350 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x387 PUSH2 0x945 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x42B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x438 PUSH2 0x95E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x815 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x728 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x534 JUMPI PUSH2 0x728 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x615 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x6CE JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x679 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x6E3 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x51C JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x748 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x811 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x811 SWAP1 POP DUP3 PUSH2 0x989 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x29A PUSH2 0x9D8 JUMP JUMPDEST PUSH2 0x82B PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x91B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x957 PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xBE7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x9D5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP2 PUSH2 0x100 SWAP1 DIV AND DUP4 PUSH2 0xBF9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xA4E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xB3A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xE15 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xB47 PUSH2 0x95E JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBC9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0xBF5 JUMPI PUSH2 0xBF5 DUP2 PUSH2 0xC8B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xC86 SWAP1 DUP5 SWAP1 PUSH2 0xCF8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD61 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD24 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDC3 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 0xDC8 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xDE0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0xE0E DUP2 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0xE06 JUMPI POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1A2 PUSH2 0xBE7 JUMP JUMPDEST POP POP POP POP JUMP INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0xE17480F034AEEA4F7AB6BC6E5E8E1B17E7755FBC88DC2401AAEB68FDDD98 0xA5 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "920:703:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6514:191:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6514:191:58;;;;:::i;:::-;;;;;;;;;;;;;;;;1390:99:64;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6408:100:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6408:100:58;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6711:92;;;;;;;;;;;;;:::i;6878:154::-;;;;;;;;;;;;;:::i;:::-;;3432:2685;;;:::i;1192:192:64:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1192:192:64;;;;:::i;7112:157:58:-;;;;;;;;;;;;;:::i;6514:191::-;6588:7;6615:21;;;6631:4;6615:21;6607:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6688:10:58;;;6514:191::o;1390:99:64:-;1472:10;;;;;;;1390:99;;:::o;6408:100:58:-;-1:-1:-1;6497:4:58;;6408:100::o;6711:92::-;6787:9;;;;6711:92;:::o;6878:154::-;6935:10;:41;6957:18;6935:41;;6927:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:9;:16;;;;7021:4;7009:16;;;6878:154::o;3432:2685::-;3502:4;2613:20:44;:18;:20::i;:::-;3526:10:58::1;:41;3548:18;3526:41;;3518:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3621:7;::::0;3600:18:::1;3662:16;:14;:16::i;:::-;3638:40;;3706:13;3693:10;:26;3689:2400;;;3735:48;::::0;;;;;3777:4:::1;3735:48;::::0;::::1;::::0;;;:33:::1;:16;:33;::::0;::::1;::::0;:48;;;;;-1:-1:-1;;3735:48:58;;;;;;;-1:-1:-1;3735:33:58;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3813:5:58::1;::::0;;3923:15:::1;::::0;3870;;;::::1;::::0;3813:5;;-1:-1:-1;3798:12:58::1;::::0;-1:-1:-1;3941:20:58::1;3923:38;3870:15:::0;3975:1869:::1;4008:10;4021:3;4008:16;4004:1;:20;3975:1869;;;4057:13;4053:1;:17;4049:28;;;4072:5;;4049:28;4212:65;::::0;;;;;4259:4:::1;4212:65;::::0;::::1;::::0;4121:7:::1;4117:11:::0;::::1;4212:65:::0;;;;;;;;4096:18:::1;::::0;;;4212:38:::1;:16;:38;::::0;::::1;::::0;:65;;;;;::::1;::::0;;;;;;;;4096:18;4212:38;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4212:65:58;;-1:-1:-1;4300:27:58;;::::1;::::0;::::1;::::0;:67:::1;;;4347:10;4360:7;4347:20;4331:13;:36;4300:67;4296:1424;;;4946:26:::0;;::::1;5059:6;5012:18:::0;;::::1;:43:::0;::::1;5011:54;4994:71;;5174:27;5153:17;5146:4;:24;5145:56;;;;;;::::0;-1:-1:-1;5329:7:58::1;:32:::0;;::::1;5445:6;5402:18:::0;;::::1;:39:::0;::::1;5474:5;:12:::0;;;5508:15:::1;:31:::0;;;5578:20:::1;5561:37:::0;;::::1;::::0;5401:50:::1;5383:68:::0;;;::::1;::::0;-1:-1:-1;4296:1424:58::1;::::0;-1:-1:-1;4296:1424:58::1;;5695:6;5684:7;5663:18:::0;;::::1;:28;5662:39;5645:56;;4296:1424;5743:38;::::0;;;;;;;5754:10;;5743:38:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;5799:30:58;;;::::1;::::0;-1:-1:-1;4026:3:58::1;;3975:1869;;;-1:-1:-1::0;5858:7:58::1;:23:::0;;;5895:10:::1;:26:::0;;;::::1;::::0;;5940:16;;;;;:30:::1;;-1:-1:-1::0;5961:9:58::1;::::0;::::1;;5960:10;5940:30;5936:143;;;5990:27;::::0;;;;;6011:4:::1;5990:27;::::0;::::1;::::0;;;:12:::1;:7;:12;::::0;::::1;::::0;:27;;;;;::::1;::::0;;;;;;;;-1:-1:-1;5990:12:58;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6035:29:58::1;::::0;-1:-1:-1;6051:12:58;6035:15:::1;:29::i;:::-;3689:2400;;;;6106:4;6099:11;;;;2654:19:44::0;:17;:19::i;1192:192:64:-;1321:23;:21;:23::i;:::-;1355:10;:22;;;;;;;;;;;;;;;;;;1192:192::o;7112:157:58:-;7171:10;:41;7193:18;7171:41;;7163:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7245:9;:17;;;;;;7112:157::o;2686:271:44:-;2809:48;2113:1;2818:7;;:19;;8984:3:20;2809:8:44;:48::i;:::-;2113:1;2932:7;:18;2686:271::o;6123:167:58:-;6252:31;6271:7;6253:15;:25;6252:31;;6123:167::o;1495:126:64:-;1591:10;;1568:46;;1591:10;1568:9;:22;;;1591:10;;;;1603;1568:22;:46::i;:::-;1495:126;:::o;2963:208:44:-;2070:1;3142:7;:22;2963:208::o;2956:470:58:-;3016:7;;:12;3008:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3198:12;3213:11;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3213:18:58;;-1:-1:-1;3249:9:58;3241:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3310:5;:12;;;3342:16;:14;:16::i;:::-;3332:7;:26;;;;3386:11;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3386:33:58;3368:15;:51;-1:-1:-1;2956:470:58:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;1000:214:45:-;1148:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1171:23;1148:58;;;1112:95;;1140:5;;1112:19;:95::i;:::-;1000:214;;;:::o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14;1810:914:45;2112:12;2126:23;2153:5;:10;;2164:4;2153:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2111:58;;;;2363:1;2354:7;2351:14;2348:2;;;2405:16;2402:1;2399;2384:38;2449:16;2446:1;2439:27;2348:2;2620:97;2629:10;:17;2650:1;2629:22;:56;;;;2666:10;2655:30;;;;;;;;;;;;;;;-1:-1:-1;2655:30:45;2629:56;10129:3:20;2620:8:45;:97::i;:::-;1810:914;;;;:::o" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "getRecipient()": "1b88094d", + "initialize(address)": "c4d66de8", + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBalancerMinter\",\"name\":\"minter\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"periodTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"periodEmissions\",\"type\":\"uint256\"}],\"name\":\"Checkpoint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"killGauge()\":{\"notice\":\"Kills the gauge so it cannot mint BAL\"},\"unkillGauge()\":{\"notice\":\"Unkills the gauge so it can mint BAL again\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/ethereum/SingleRecipientGauge.sol\":\"SingleRecipientGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\":{\"keccak256\":\"0x773d0bf95fd51f7042cf5e20d1424aae24218c358ad71676c29878f76d81e7f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86d0397ef1443257ad7a49306f3f2bdd490f4a238d4d416373031b8262d211ee\",\"dweb:/ipfs/QmUHBu6gWfnhLEjQ3FCcbha6zUVZVfPFaNJMvnz9h8Prvy\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]},\"contracts/gauges/ethereum/SingleRecipientGauge.sol\":{\"keccak256\":\"0xda2c6daad8ae97fc6580a503ef1bd34c3bfee89c1fff650e62b928d33564b536\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://75a3486ebec8b42436b98ebd7c7975aebd63645d1d13ef18d273828c6f9a0b44\",\"dweb:/ipfs/QmPd7w1i4dYhxG2TGVP2ZW3SgFBPuYNHLHs1gqE3jGja7K\"]}},\"version\":1}" + } + }, + "contracts/gauges/ethereum/SingleRecipientGaugeFactory.sol": { + "SingleRecipientGaugeFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IBalancerMinter", + "name": "minter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "SingleRecipientGaugeCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeImplementation", + "outputs": [ + { + "internalType": "contract ISingleRecipientGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugeRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "getRecipientGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060405161191238038061191283398101604081905261002f91610096565b8060405161003c90610089565b61004691906100c4565b604051809103906000f080158015610062573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100d8565b6112a48061066e83390190565b6000602082840312156100a7578081fd5b81516001600160a01b03811681146100bd578182fd5b9392505050565b6001600160a01b0391909116815260200190565b610587806100e76000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639ed93318116100505780639ed933181461009d578063ce3cc8bd146100b0578063fa72ce95146100d057610067565b806339312dee1461006c5780637d5d0d101461008a575b600080fd5b6100746100e3565b6040516100819190610492565b60405180910390f35b610074610098366004610453565b6100ff565b6100746100ab366004610453565b61012d565b6100c36100be366004610453565b6102f5565b60405161008191906104b3565b6100746100de366004610453565b610320565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054165b919050565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526002602052604081205490911615610197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104be565b60405180910390fd5b600080546101ba9073ffffffffffffffffffffffffffffffffffffffff166103a6565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de89061020f908690600401610492565b600060405180830381600087803b15801561022957600080fd5b505af115801561023d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff818116600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255938716808352600290945280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517f8cef09b96018886e359c85f62ed52d97cf7b7263e23efde6031acea9661163b79190a392915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60008173ffffffffffffffffffffffffffffffffffffffff16631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036857600080fd5b505afa15801561037c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a09190610476565b92915050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116610128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104f5565b600060208284031215610464578081fd5b813561046f8161052c565b9392505050565b600060208284031215610487578081fd5b815161046f8161052c565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461054e57600080fd5b5056fea264697066735822122085b6a8fb10920819fa6b03282c151651a28a5685128ce607a963fe9478f86b5664736f6c634300070100336101806040523480156200001257600080fd5b50604051620012a4380380620012a4833981810160405260208110156200003857600080fd5b5051600160009081556040805163e6dec36f60e01b815290518392916001600160a01b0384169163e6dec36f91600480820192602092909190829003018186803b1580156200008657600080fd5b505afa1580156200009b573d6000803e3d6000fd5b505050506040513d6020811015620000b257600080fd5b50516040805163c003969960e01b815290519192506000916001600160a01b0384169163c0039699916004808301926020929190829003018186803b158015620000fb57600080fd5b505afa15801562000110573d6000803e3d6000fd5b505050506040513d60208110156200012757600080fd5b505160408051632c6f4d6f60e11b815290519192506000916001600160a01b038616916358de9ade916004808301926020929190829003018186803b1580156200017057600080fd5b505afa15801562000185573d6000803e3d6000fd5b505050506040513d60208110156200019c57600080fd5b50516001600160601b0319606084811b821660805285811b821660a05286811b821660c05282901b1660e052604080516303e1469160e61b815290519192506001600160a01b0383169163f851a44091600480820192602092909190829003018186803b1580156200020d57600080fd5b505afa15801562000222573d6000803e3d6000fd5b505050506040513d60208110156200023957600080fd5b505160601b6001600160601b0319166101005260408051635c3dab0b60e11b815290516001600160a01b0385169163b87b5616916004808301926020929190829003018186803b1580156200028d57600080fd5b505afa158015620002a2573d6000803e3d6000fd5b505050506040513d6020811015620002b957600080fd5b505161012052604080516321609bbf60e01b815290516001600160a01b038516916321609bbf916004808301926020929190829003018186803b1580156200030057600080fd5b505afa15801562000315573d6000803e3d6000fd5b505050506040513d60208110156200032c57600080fd5b505161014052604080516303f7d6c760e51b815290516001600160a01b03851691637efad8e0916004808301926020929190829003018186803b1580156200037357600080fd5b505afa15801562000388573d6000803e3d6000fd5b505050506040513d60208110156200039f57600080fd5b505161016052505060001960025550505060805160601c60a05160601c60c05160601c60e05160601c6101005160601c610120516101405161016051610e6e62000436600039806106515250806106305250806104fa528061069d5250806102c4528061039f528061088f525080610488528061058c525080610793525080610a525280610b4f5250806109a75250610e6e6000f3fe60806040526004361061007b5760003560e01c8063ab8f09451161004e578063ab8f094514610179578063c2c4c5c114610190578063c4d66de814610198578063d34fb267146101d85761007b565b806309400707146100805780631b88094d146100d25780634b820093146101105780639c868ac014610164575b600080fd5b34801561008c57600080fd5b506100c0600480360360208110156100a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ed565b60408051918252519081900360200190f35b3480156100de57600080fd5b506100e761027b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561011c57600080fd5b506101506004803603602081101561013357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661029d565b604080519115158252519081900360200190f35b34801561017057600080fd5b506101506102a3565b34801561018557600080fd5b5061018e6102ac565b005b61015061037d565b3480156101a457600080fd5b5061018e600480360360208110156101bb57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610823565b3480156101e457600080fd5b5061018e610877565b600073ffffffffffffffffffffffffffffffffffffffff8216301461027357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461035057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000610387610945565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461042b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600254600061043861095e565b90508082101561081557604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b1580156104cf57600080fd5b505af11580156104e3573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610728578481111561053457610728565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b1580156105d357600080fd5b505af11580156105e7573d6000803e3d6000fd5b505050506040513d60208110156105fd57600080fd5b5051905082851080159061061557508262093a800185105b156106ce57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089028161067957fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506106e39050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161051c565b50600284905560048054830190558115801590610748575060055460ff16155b1561081157604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b1580156107db57600080fd5b505af11580156107ef573d6000803e3d6000fd5b505050506040513d602081101561080557600080fd5b50610811905082610989565b5050505b60019250505061029a6109d8565b61082b6109df565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461091b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61095760026000541415610190610be7565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b6005546109d59073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169161010090041683610bf9565b50565b6001600055565b60025415610a4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ab657600080fd5b505afa158015610aca573d6000803e3d6000fd5b505050506040513d6020811015610ae057600080fd5b5051905080610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610e156024913960400191505060405180910390fd5b6001819055610b4761095e565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610bb557600080fd5b505af1158015610bc9573d6000803e3d6000fd5b505050506040513d6020811015610bdf57600080fd5b505160035550565b81610bf557610bf581610c8b565b5050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610c86908490610cf8565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310610d6157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d24565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b50915091506000821415610de0573d6000803e3d6000fd5b610e0e815160001480610e065750818060200190516020811015610e0357600080fd5b50515b6101a2610be7565b5050505056fe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a26469706673582212207de17480f034aeea4f7ab6bc6e5e8e1b17e7755fbc88dc2401aaeb68fddd98a564736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1912 CODESIZE SUB DUP1 PUSH2 0x1912 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x96 JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH2 0x3C SWAP1 PUSH2 0x89 JUMP JUMPDEST PUSH2 0x46 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 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 PUSH2 0xD8 JUMP JUMPDEST PUSH2 0x12A4 DUP1 PUSH2 0x66E DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA7 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xBD JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x587 DUP1 PUSH2 0xE7 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 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9ED93318 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0xFA72CE95 EQ PUSH2 0xD0 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x7D5D0D10 EQ PUSH2 0x8A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74 PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x492 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x74 PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0xFF JUMP JUMPDEST PUSH2 0x74 PUSH2 0xAB CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x2F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x4B3 JUMP JUMPDEST PUSH2 0x74 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x320 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x197 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x1BA SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x20F SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x492 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0x8CEF09B96018886E359C85F62ED52D97CF7B7263E23EFDE6031ACEA9661163B7 SWAP2 SWAP1 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1B88094D 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x3A0 SWAP2 SWAP1 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x128 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4F5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x464 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x487 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB6 0xA8 0xFB LT SWAP3 ADDMOD NOT STATICCALL PUSH12 0x3282C151651A28A5685128C 0xE6 SMOD 0xA9 PUSH4 0xFE9478F8 PUSH12 0x5664736F6C63430007010033 PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x12A4 CODESIZE SUB DUP1 PUSH3 0x12A4 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xE6DEC36F PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xE6DEC36F SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x110 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2C6F4D6F PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x58DE9ADE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 DUP2 SHL DUP3 AND PUSH1 0x80 MSTORE DUP6 DUP2 SHL DUP3 AND PUSH1 0xA0 MSTORE DUP7 DUP2 SHL DUP3 AND PUSH1 0xC0 MSTORE DUP3 SWAP1 SHL AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x222 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5C3DAB0B PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0xB87B5616 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x2A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x21609BBF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x21609BBF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x300 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x315 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3F7D6C7 PUSH1 0xE5 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x7EFAD8E0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x388 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x160 MSTORE POP POP PUSH1 0x0 NOT PUSH1 0x2 SSTORE POP POP POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0xE6E PUSH3 0x436 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x651 MSTORE POP DUP1 PUSH2 0x630 MSTORE POP DUP1 PUSH2 0x4FA MSTORE DUP1 PUSH2 0x69D MSTORE POP DUP1 PUSH2 0x2C4 MSTORE DUP1 PUSH2 0x39F MSTORE DUP1 PUSH2 0x88F MSTORE POP DUP1 PUSH2 0x488 MSTORE DUP1 PUSH2 0x58C MSTORE POP DUP1 PUSH2 0x793 MSTORE POP DUP1 PUSH2 0xA52 MSTORE DUP1 PUSH2 0xB4F MSTORE POP DUP1 PUSH2 0x9A7 MSTORE POP PUSH2 0xE6E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB8F0945 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x179 JUMPI DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x1D8 JUMPI PUSH2 0x7B JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x164 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1ED JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE7 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x150 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x150 PUSH2 0x2A3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH2 0x2AC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x150 PUSH2 0x37D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x823 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH2 0x877 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x273 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x350 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x387 PUSH2 0x945 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x42B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x438 PUSH2 0x95E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x815 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x728 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x534 JUMPI PUSH2 0x728 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x615 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x6CE JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x679 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x6E3 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x51C JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x748 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x811 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x811 SWAP1 POP DUP3 PUSH2 0x989 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x29A PUSH2 0x9D8 JUMP JUMPDEST PUSH2 0x82B PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x91B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x957 PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xBE7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x9D5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP2 PUSH2 0x100 SWAP1 DIV AND DUP4 PUSH2 0xBF9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xA4E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xB3A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xE15 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xB47 PUSH2 0x95E JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBC9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0xBF5 JUMPI PUSH2 0xBF5 DUP2 PUSH2 0xC8B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0xC86 SWAP1 DUP5 SWAP1 PUSH2 0xCF8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xD61 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xD24 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xDC3 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 0xDC8 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xDE0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0xE0E DUP2 MLOAD PUSH1 0x0 EQ DUP1 PUSH2 0xE06 JUMPI POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0x1A2 PUSH2 0xBE7 JUMP JUMPDEST POP POP POP POP JUMP INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0xE17480F034AEEA4F7AB6BC6E5E8E1B17E7755FBC88DC2401AAEB68FDDD98 0xA5 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "963:2218:65:-:0;;;1301:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1395:6;1370:32;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1347:20:65;:55;;-1:-1:-1;;;;;;1347:55:65;-1:-1:-1;;;;;1347:55:65;;;;;;;;;;-1:-1:-1;963:2218:65;;;;;;;;;;:::o;192:309:-1:-;;330:2;318:9;309:7;305:23;301:32;298:2;;;-1:-1;;336:12;298:2;106:13;;-1:-1;;;;;1243:54;;1703:58;;1693:2;;-1:-1;;1765:12;1693:2;388:97;292:209;-1:-1;;;292:209::o;687:268::-;-1:-1;;;;;1243:54;;;;602:73;;837:2;822:18;;808:147::o;:::-;963:2218:65;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100675760003560e01c80639ed93318116100505780639ed933181461009d578063ce3cc8bd146100b0578063fa72ce95146100d057610067565b806339312dee1461006c5780637d5d0d101461008a575b600080fd5b6100746100e3565b6040516100819190610492565b60405180910390f35b610074610098366004610453565b6100ff565b6100746100ab366004610453565b61012d565b6100c36100be366004610453565b6102f5565b60405161008191906104b3565b6100746100de366004610453565b610320565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054165b919050565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526002602052604081205490911615610197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104be565b60405180910390fd5b600080546101ba9073ffffffffffffffffffffffffffffffffffffffff166103a6565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de89061020f908690600401610492565b600060405180830381600087803b15801561022957600080fd5b505af115801561023d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff818116600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255938716808352600290945280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517f8cef09b96018886e359c85f62ed52d97cf7b7263e23efde6031acea9661163b79190a392915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60008173ffffffffffffffffffffffffffffffffffffffff16631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036857600080fd5b505afa15801561037c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a09190610476565b92915050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116610128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104f5565b600060208284031215610464578081fd5b813561046f8161052c565b9392505050565b600060208284031215610487578081fd5b815161046f8161052c565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461054e57600080fd5b5056fea264697066735822122085b6a8fb10920819fa6b03282c151651a28a5685128ce607a963fe9478f86b5664736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9ED93318 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0xFA72CE95 EQ PUSH2 0xD0 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x7D5D0D10 EQ PUSH2 0x8A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74 PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x492 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x74 PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0xFF JUMP JUMPDEST PUSH2 0x74 PUSH2 0xAB CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x2F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x4B3 JUMP JUMPDEST PUSH2 0x74 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x320 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x197 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x1BA SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x20F SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x492 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0x8CEF09B96018886E359C85F62ED52D97CF7B7263E23EFDE6031ACEA9661163B7 SWAP2 SWAP1 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1B88094D 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x3A0 SWAP2 SWAP1 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x128 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4F5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x464 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x487 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0xB6 0xA8 0xFB LT SWAP3 ADDMOD NOT STATICCALL PUSH12 0x3282C151651A28A5685128C 0xE6 SMOD 0xA9 PUSH4 0xFE9478F8 PUSH12 0x5664736F6C63430007010033 ", + "sourceMap": "963:2218:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1516:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1948:162;;;;;;:::i;:::-;;:::i;2716:463::-;;;;;;:::i;:::-;;:::i;1728:131::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2181:150::-;;;;;;:::i;:::-;;:::i;1516:122::-;1571:21;1611:20;;;1516:122;:::o;1948:162::-;2076:26;;;;2026:15;2076:26;;;:15;:26;;;;;;;1948:162;;;;:::o;2716:463::-;2805:40;:26;;;2778:7;2805:26;;;:15;:26;;;;;;2778:7;;2805:26;:40;2797:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2881:13;2918:20;;2897:43;;2918:20;;2897:12;:43::i;:::-;2951:50;;;;;2881:59;;-1:-1:-1;2951:39:65;;;;;;:50;;2991:9;;2951:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;3012:26:65;;;;;;;;3041:4;3012:26;;;;;;;;:33;;;;;;;;;;3055:26;;;;;;:15;:26;;;;;;:34;;;;;;;;3104:45;;;3012:26;3104:45;3167:5;2716:463;-1:-1:-1;;2716:463:65:o;1728:131::-;1826:26;;1803:4;1826:26;;;:19;:26;;;;;;;;;1728:131::o;2181:150::-;2255:7;2303:5;2281:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2274:50;2181:150;-1:-1:-1;;2181:150:65:o;1001:515:38:-;1058:16;1126:4;1120:11;1156:66;1151:3;1144:79;1269:14;1263:4;1259:25;1252:4;1247:3;1243:14;1236:49;1321:66;1314:4;1309:3;1305:14;1298:90;1428:4;1423:3;1420:1;1413:20;1401:32;-1:-1:-1;;1460:22:38;;;1452:57;;;;;;;;;;;;:::i;283:241:-1:-;;387:2;375:9;366:7;362:23;358:32;355:2;;;-1:-1;;393:12;355:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;445:63;349:175;-1:-1;;;349:175::o;531:263::-;;646:2;634:9;625:7;621:23;617:32;614:2;;;-1:-1;;652:12;614:2;226:6;220:13;238:33;265:5;238:33;:::i;2062:222::-;4351:42;4340:54;;;;872:37;;2189:2;2174:18;;2160:124::o;2291:210::-;4252:13;;4245:21;986:34;;2412:2;2397:18;;2383:118::o;3070:416::-;3270:2;3284:47;;;1627:2;3255:18;;;4020:19;1663:22;4060:14;;;1643:43;1705:12;;;3241:245::o;3493:416::-;3693:2;3707:47;;;1956:2;3678:18;;;4020:19;1992:24;4060:14;;;1972:45;2036:12;;;3664:245::o;5048:117::-;4351:42;5135:5;4340:54;5110:5;5107:35;5097:2;;5156:1;;5146:12;5097:2;5091:74;:::o" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getGaugeImplementation()": "39312dee", + "getGaugeRecipient(address)": "fa72ce95", + "getRecipientGauge(address)": "7d5d0d10", + "isGaugeFromFactory(address)": "ce3cc8bd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBalancerMinter\",\"name\":\"minter\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"SingleRecipientGaugeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeImplementation\",\"outputs\":[{\"internalType\":\"contract ISingleRecipientGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"getRecipientGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(address)\":{\"details\":\"Care must be taken to ensure that gauges deployed from this factory are suitable before they are added to the GaugeController.\",\"params\":{\"recipient\":\"The address to receive BAL minted from the gauge\"},\"returns\":{\"_0\":\"The address of the deployed gauge\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create(address)\":{\"notice\":\"Deploys a new gauge which sends all of its BAL allowance to a single recipient.\"},\"getGaugeImplementation()\":{\"notice\":\"Returns the address of the implementation used for gauge deployments.\"},\"getGaugeRecipient(address)\":{\"notice\":\"Returns the recipient of `gauge`.\"},\"getRecipientGauge(address)\":{\"notice\":\"Returns the gauge which sends funds to `recipient`.\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/ethereum/SingleRecipientGaugeFactory.sol\":\"SingleRecipientGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol\":{\"keccak256\":\"0x0fbfdb1443cb651d81d7b2a7bf5d4211f96a3cf2698d83af9653f701e9b10f26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c65076fedf4ab56455d4d94fde8547b6610b71ca16a7cf9ead88ef68ca2262a7\",\"dweb:/ipfs/QmPCo9osP53Ay871mk4sWxuAki7oq4odCtjpY3wpS743cn\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":{\"keccak256\":\"0x0ef386c5d211024ce07fd77245128db56fdfd2aae7e5e4232b72fb0cecb6be03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f09b20288f085f7a2ce289a8b1676d2d873e76a25929fbd9328e2d722225b5\",\"dweb:/ipfs/QmbVW5u6dSXsTBb66tKHS9QN5RPonEcpNzAjJ1nBe8UVRi\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol\":{\"keccak256\":\"0x773d0bf95fd51f7042cf5e20d1424aae24218c358ad71676c29878f76d81e7f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86d0397ef1443257ad7a49306f3f2bdd490f4a238d4d416373031b8262d211ee\",\"dweb:/ipfs/QmUHBu6gWfnhLEjQ3FCcbha6zUVZVfPFaNJMvnz9h8Prvy\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]},\"contracts/gauges/ethereum/SingleRecipientGauge.sol\":{\"keccak256\":\"0xda2c6daad8ae97fc6580a503ef1bd34c3bfee89c1fff650e62b928d33564b536\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://75a3486ebec8b42436b98ebd7c7975aebd63645d1d13ef18d273828c6f9a0b44\",\"dweb:/ipfs/QmPd7w1i4dYhxG2TGVP2ZW3SgFBPuYNHLHs1gqE3jGja7K\"]},\"contracts/gauges/ethereum/SingleRecipientGaugeFactory.sol\":{\"keccak256\":\"0xe20fe48f667fcb90e1bb71bbdaf414d1f1abc7e8a5ebab297b70687e1ac0d15c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d387e827919ba9a698ceeb91eb6d3fa134012ec550bc65926dfcba683dd7c981\",\"dweb:/ipfs/QmTgTrEHjCPY3zjP1YvL34txKWvVYJLDsyZsGTk71fexZ4\"]}},\"version\":1}" + } + }, + "contracts/gauges/polygon/PolygonRootGauge.sol": { + "IPolygonRootChainManager": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "depositData", + "type": "bytes" + } + ], + "name": "depositFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "depositFor(address,address,bytes)": "e3dec8fb" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"depositData\",\"type\":\"bytes\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/polygon/PolygonRootGauge.sol\":\"IPolygonRootChainManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]},\"contracts/gauges/polygon/PolygonRootGauge.sol\":{\"keccak256\":\"0x93b53d33dfd82b9705b8ad1e8b68b70c5eadd2f6a532392d25ed6734e1eb6e0c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://36114a86f27c30a03227fc8d3ad7649169d40af5de3e25466d14ec04bda745ee\",\"dweb:/ipfs/Qmc37RModnRt4tq6q1koie9vVGn7zc11VdcECycnPUuMSA\"]}},\"version\":1}" + }, + "PolygonRootGauge": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IBalancerMinter", + "name": "minter", + "type": "address" + }, + { + "internalType": "contract IPolygonRootChainManager", + "name": "polygonRootChainManager", + "type": "address" + }, + { + "internalType": "address", + "name": "polygonERC20Predicate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "periodTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodEmissions", + "type": "uint256" + } + ], + "name": "Checkpoint", + "type": "event" + }, + { + "inputs": [], + "name": "checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getPolygonBridge", + "outputs": [ + { + "internalType": "contract IPolygonRootChainManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPolygonERC20Predicate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "integrate_fraction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "is_killed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "killGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unkillGauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "user_checkpoint", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6101c06040523480156200001257600080fd5b50604051620013df380380620013df833981810160405260608110156200003857600080fd5b50805160208083015160409384015160016000908155855163e6dec36f60e01b81529551949592949193869391926001600160a01b0385169263e6dec36f926004808301939192829003018186803b1580156200009457600080fd5b505afa158015620000a9573d6000803e3d6000fd5b505050506040513d6020811015620000c057600080fd5b50516040805163c003969960e01b815290519192506000916001600160a01b0384169163c0039699916004808301926020929190829003018186803b1580156200010957600080fd5b505afa1580156200011e573d6000803e3d6000fd5b505050506040513d60208110156200013557600080fd5b505160408051632c6f4d6f60e11b815290519192506000916001600160a01b038616916358de9ade916004808301926020929190829003018186803b1580156200017e57600080fd5b505afa15801562000193573d6000803e3d6000fd5b505050506040513d6020811015620001aa57600080fd5b50516001600160601b0319606084811b821660805285811b821660a05286811b821660c05282901b1660e052604080516303e1469160e61b815290519192506001600160a01b0383169163f851a44091600480820192602092909190829003018186803b1580156200021b57600080fd5b505afa15801562000230573d6000803e3d6000fd5b505050506040513d60208110156200024757600080fd5b505160601b6001600160601b0319166101005260408051635c3dab0b60e11b815290516001600160a01b0385169163b87b5616916004808301926020929190829003018186803b1580156200029b57600080fd5b505afa158015620002b0573d6000803e3d6000fd5b505050506040513d6020811015620002c757600080fd5b505161012052604080516321609bbf60e01b815290516001600160a01b038516916321609bbf916004808301926020929190829003018186803b1580156200030e57600080fd5b505afa15801562000323573d6000803e3d6000fd5b505050506040513d60208110156200033a57600080fd5b505161014052604080516303f7d6c760e51b815290516001600160a01b03851691637efad8e0916004808301926020929190829003018186803b1580156200038157600080fd5b505afa15801562000396573d6000803e3d6000fd5b505050506040513d6020811015620003ad57600080fd5b505161016052505060001960025550506001600160601b0319606092831b811661018052911b166101a0525060805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205161014051610160516101805160601c6101a05160601c610f5762000488600039806109cb5280610a6f5250806109a75280610bb25250806106b152508061069052508061055a52806106fd52508061032452806103ff52806108ef5250806104e852806105ec5250806107f3525080610ce95280610de6525080610a335280610b775250610f576000f3fe6080604052600436106100b15760003560e01c8063c2c4c5c111610069578063d34fb2671161004e578063d34fb2671461020e578063fe022cc914610223578063fe33859e14610238576100b1565b8063c2c4c5c1146101c6578063c4d66de8146101ce576100b1565b80634b8200931161009a5780634b820093146101465780639c868ac01461019a578063ab8f0945146101af576100b1565b806309400707146100b65780631b88094d14610108575b600080fd5b3480156100c257600080fd5b506100f6600480360360208110156100d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b60408051918252519081900360200190f35b34801561011457600080fd5b5061011d6102db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561015257600080fd5b506101866004803603602081101561016957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166102fd565b604080519115158252519081900360200190f35b3480156101a657600080fd5b50610186610303565b3480156101bb57600080fd5b506101c461030c565b005b6101866103dd565b3480156101da57600080fd5b506101c4600480360360208110156101f157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610883565b34801561021a57600080fd5b506101c46108d7565b34801561022f57600080fd5b5061011d6109a5565b34801561024457600080fd5b5061011d6109c9565b600073ffffffffffffffffffffffffffffffffffffffff821630146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006103e76109ed565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461048b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6002546000610498610a06565b90508082101561087557604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b15801561052f57600080fd5b505af1158015610543573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610788578481111561059457610788565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b15801561063357600080fd5b505af1158015610647573d6000803e3d6000fd5b505050506040513d602081101561065d57600080fd5b5051905082851080159061067557508262093a800185105b1561072e57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008902816106d957fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506107439050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161057c565b506002849055600480548301905581158015906107a8575060055460ff16155b1561087157604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b15801561083b57600080fd5b505af115801561084f573d6000803e3d6000fd5b505050506040513d602081101561086557600080fd5b50610871905082610a31565b5050505b6001925050506102fa610c6f565b61088b610c76565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461097b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6109ff60026000541415610190610e7e565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b505050506040513d6020811015610b0c57600080fd5b5050600554604080516020808201859052825180830382018152828401938490527fe3dec8fb0000000000000000000000000000000000000000000000000000000090935273ffffffffffffffffffffffffffffffffffffffff6101009094048416604483018181527f00000000000000000000000000000000000000000000000000000000000000008087166064860152606060848601908152865160a487015286517f00000000000000000000000000000000000000000000000000000000000000009098169763e3dec8fb9794969295919260c4019185019080838360005b83811015610c06578181015183820152602001610bee565b50505050905090810190601f168015610c335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610c5457600080fd5b505af1158015610c68573d6000803e3d6000fd5b5050505050565b6001600055565b60025415610ce557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4d57600080fd5b505afa158015610d61573d6000803e3d6000fd5b505050506040513d6020811015610d7757600080fd5b5051905080610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610efe6024913960400191505060405180910390fd5b6001819055610dde610a06565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b505160035550565b81610e8c57610e8c81610e90565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a264697066735822122088de1c5c0e79eb01d25e6ae7fad368706dfbcb4f825cdc57959f91f6ff30b26e64736f6c63430007010033", + "opcodes": "PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x13DF CODESIZE SUB DUP1 PUSH3 0x13DF DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE DUP6 MLOAD PUSH4 0xE6DEC36F PUSH1 0xE0 SHL DUP2 MSTORE SWAP6 MLOAD SWAP5 SWAP6 SWAP3 SWAP5 SWAP2 SWAP4 DUP7 SWAP4 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP3 PUSH4 0xE6DEC36F SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2C6F4D6F PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x58DE9ADE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x193 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 DUP2 SHL DUP3 AND PUSH1 0x80 MSTORE DUP6 DUP2 SHL DUP3 AND PUSH1 0xA0 MSTORE DUP7 DUP2 SHL DUP3 AND PUSH1 0xC0 MSTORE DUP3 SWAP1 SHL AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x230 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5C3DAB0B PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0xB87B5616 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x2B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x21609BBF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x21609BBF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x30E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x323 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3F7D6C7 PUSH1 0xE5 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x7EFAD8E0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x396 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x160 MSTORE POP POP PUSH1 0x0 NOT PUSH1 0x2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH2 0x180 MSTORE SWAP2 SHL AND PUSH2 0x1A0 MSTORE POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x60 SHR PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0xF57 PUSH3 0x488 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x9CB MSTORE DUP1 PUSH2 0xA6F MSTORE POP DUP1 PUSH2 0x9A7 MSTORE DUP1 PUSH2 0xBB2 MSTORE POP DUP1 PUSH2 0x6B1 MSTORE POP DUP1 PUSH2 0x690 MSTORE POP DUP1 PUSH2 0x55A MSTORE DUP1 PUSH2 0x6FD MSTORE POP DUP1 PUSH2 0x324 MSTORE DUP1 PUSH2 0x3FF MSTORE DUP1 PUSH2 0x8EF MSTORE POP DUP1 PUSH2 0x4E8 MSTORE DUP1 PUSH2 0x5EC MSTORE POP DUP1 PUSH2 0x7F3 MSTORE POP DUP1 PUSH2 0xCE9 MSTORE DUP1 PUSH2 0xDE6 MSTORE POP DUP1 PUSH2 0xA33 MSTORE DUP1 PUSH2 0xB77 MSTORE POP PUSH2 0xF57 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC2C4C5C1 GT PUSH2 0x69 JUMPI DUP1 PUSH4 0xD34FB267 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0xFE022CC9 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0xFE33859E EQ PUSH2 0x238 JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x1CE JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0x4B820093 GT PUSH2 0x9A JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x1AF JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0x108 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x24D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x2DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x186 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x186 PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH2 0x30C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x186 PUSH2 0x3DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x883 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH2 0x8D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x9A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x9C9 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x2D3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x3B0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E7 PUSH2 0x9ED JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x48B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x498 PUSH2 0xA06 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x875 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x788 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x594 JUMPI PUSH2 0x788 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x647 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x65D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x675 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x72E JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x6D9 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x743 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x57C JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x7A8 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x871 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x84F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x871 SWAP1 POP DUP3 PUSH2 0xA31 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x2FA PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x88B PUSH2 0xC76 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x97B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x9FF PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xE7E JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE DUP3 DUP5 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH32 0xE3DEC8FB00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP5 DIV DUP5 AND PUSH1 0x44 DUP4 ADD DUP2 DUP2 MSTORE PUSH32 0x0 DUP1 DUP8 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x60 PUSH1 0x84 DUP7 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP8 ADD MSTORE DUP7 MLOAD PUSH32 0x0 SWAP1 SWAP9 AND SWAP8 PUSH4 0xE3DEC8FB SWAP8 SWAP5 SWAP7 SWAP3 SWAP6 SWAP2 SWAP3 PUSH1 0xC4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC06 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBEE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC33 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD61 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xDD1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xEFE PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xDDE PUSH2 0xA06 JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0xE8C JUMPI PUSH2 0xE8C DUP2 PUSH2 0xE90 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xDE SHR 0x5C 0xE PUSH26 0xEB01D25E6AE7FAD368706DFBCB4F825CDC57959F91F6FF30B26E PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "999:1573:66:-:0;;;1336:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1336:293:66;;;;;;;;;;;;2070:1:44;2175:7;:22;;;2149:30:58;;-1:-1:-1;2149:30:58;;;;1336:293:66;;;;;;;;2175:7:44;;-1:-1:-1;2149:28:58;;;-1:-1:-1;;2149:30:58;;;;;1336:293:66;;2149:30:58;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2149:30:58;2208:29;;;-1:-1:-1;2208:29:58;;;;2149:30;;-1:-1:-1;2190:15:58;;-1:-1:-1;2208:27:58;;;-1:-1:-1;;2208:29:58;;;;;2149:30;;2208:29;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2208:29:58;2282:27;;;-1:-1:-1;2282:27:58;;;;2208:29;;-1:-1:-1;2247:32:58;;-1:-1:-1;2282:25:58;;;;;:27;;;;;2208:29;;2282:27;;;;;;;:25;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2282:27:58;-1:-1:-1;;2320:20:58;;;;;;;2350:24;;;;;;;2384:16;;;;;;;2410:34;;;;;;2475:23;;;-1:-1:-1;2475:23:58;;;;2282:27;;-1:-1:-1;;2410:34:58;;;2475:21;;:23;;;;;2282:27;;2475:23;;;;;;;;2410:34;2475:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2475:23:58;2454:44;;-1:-1:-1;2454:44:58;;;2532:32;;;-1:-1:-1;2532:32:58;;;;-1:-1:-1;2532:30:58;;;;;:32;;;;;2475:23;;2532:32;;;;;;;:30;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2532:32:58;2509:55;;2604:39;;;-1:-1:-1;2604:39:58;;;;-1:-1:-1;2604:37:58;;;-1:-1:-1;;2604:39:58;;;;;2532:32;;2604:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2604:39:58;2574:69;;2673:29;;;-1:-1:-1;2673:29:58;;;;-1:-1:-1;2673:27:58;;;;;:29;;;;;2604:39;;2673:29;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2673:29:58;2653:49;;-1:-1:-1;;;;2863:7:58;:27;-1:-1:-1;;;;;;;;1516:50:66::1;::::0;;;;;::::1;::::0;1576:46;;;::::1;::::0;-1:-1:-1;999:1573:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "9490": [ + { + "length": 32, + "start": 2611 + }, + { + "length": 32, + "start": 2935 + } + ], + "9492": [ + { + "length": 32, + "start": 3305 + }, + { + "length": 32, + "start": 3558 + } + ], + "9494": [ + { + "length": 32, + "start": 2035 + } + ], + "9496": [ + { + "length": 32, + "start": 1256 + }, + { + "length": 32, + "start": 1516 + } + ], + "9498": [ + { + "length": 32, + "start": 804 + }, + { + "length": 32, + "start": 1023 + }, + { + "length": 32, + "start": 2287 + } + ], + "9506": [ + { + "length": 32, + "start": 1370 + }, + { + "length": 32, + "start": 1789 + } + ], + "9508": [ + { + "length": 32, + "start": 1680 + } + ], + "9510": [ + { + "length": 32, + "start": 1713 + } + ], + "10789": [ + { + "length": 32, + "start": 2471 + }, + { + "length": 32, + "start": 2994 + } + ], + "10791": [ + { + "length": 32, + "start": 2507 + }, + { + "length": 32, + "start": 2671 + } + ] + }, + "linkReferences": {}, + "object": "6080604052600436106100b15760003560e01c8063c2c4c5c111610069578063d34fb2671161004e578063d34fb2671461020e578063fe022cc914610223578063fe33859e14610238576100b1565b8063c2c4c5c1146101c6578063c4d66de8146101ce576100b1565b80634b8200931161009a5780634b820093146101465780639c868ac01461019a578063ab8f0945146101af576100b1565b806309400707146100b65780631b88094d14610108575b600080fd5b3480156100c257600080fd5b506100f6600480360360208110156100d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b60408051918252519081900360200190f35b34801561011457600080fd5b5061011d6102db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561015257600080fd5b506101866004803603602081101561016957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166102fd565b604080519115158252519081900360200190f35b3480156101a657600080fd5b50610186610303565b3480156101bb57600080fd5b506101c461030c565b005b6101866103dd565b3480156101da57600080fd5b506101c4600480360360208110156101f157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610883565b34801561021a57600080fd5b506101c46108d7565b34801561022f57600080fd5b5061011d6109a5565b34801561024457600080fd5b5061011d6109c9565b600073ffffffffffffffffffffffffffffffffffffffff821630146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006103e76109ed565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461048b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6002546000610498610a06565b90508082101561087557604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b15801561052f57600080fd5b505af1158015610543573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610788578481111561059457610788565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b15801561063357600080fd5b505af1158015610647573d6000803e3d6000fd5b505050506040513d602081101561065d57600080fd5b5051905082851080159061067557508262093a800185105b1561072e57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008902816106d957fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506107439050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161057c565b506002849055600480548301905581158015906107a8575060055460ff16155b1561087157604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b15801561083b57600080fd5b505af115801561084f573d6000803e3d6000fd5b505050506040513d602081101561086557600080fd5b50610871905082610a31565b5050505b6001925050506102fa610c6f565b61088b610c76565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461097b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6109ff60026000541415610190610e7e565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b505050506040513d6020811015610b0c57600080fd5b5050600554604080516020808201859052825180830382018152828401938490527fe3dec8fb0000000000000000000000000000000000000000000000000000000090935273ffffffffffffffffffffffffffffffffffffffff6101009094048416604483018181527f00000000000000000000000000000000000000000000000000000000000000008087166064860152606060848601908152865160a487015286517f00000000000000000000000000000000000000000000000000000000000000009098169763e3dec8fb9794969295919260c4019185019080838360005b83811015610c06578181015183820152602001610bee565b50505050905090810190601f168015610c335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610c5457600080fd5b505af1158015610c68573d6000803e3d6000fd5b5050505050565b6001600055565b60025415610ce557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4d57600080fd5b505afa158015610d61573d6000803e3d6000fd5b505050506040513d6020811015610d7757600080fd5b5051905080610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610efe6024913960400191505060405180910390fd5b6001819055610dde610a06565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b505160035550565b81610e8c57610e8c81610e90565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a264697066735822122088de1c5c0e79eb01d25e6ae7fad368706dfbcb4f825cdc57959f91f6ff30b26e64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC2C4C5C1 GT PUSH2 0x69 JUMPI DUP1 PUSH4 0xD34FB267 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0xFE022CC9 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0xFE33859E EQ PUSH2 0x238 JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x1CE JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0x4B820093 GT PUSH2 0x9A JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x1AF JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0x108 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x24D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x2DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x186 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x186 PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH2 0x30C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x186 PUSH2 0x3DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x883 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH2 0x8D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x9A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x9C9 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x2D3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x3B0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E7 PUSH2 0x9ED JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x48B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x498 PUSH2 0xA06 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x875 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x788 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x594 JUMPI PUSH2 0x788 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x647 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x65D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x675 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x72E JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x6D9 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x743 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x57C JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x7A8 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x871 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x84F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x871 SWAP1 POP DUP3 PUSH2 0xA31 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x2FA PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x88B PUSH2 0xC76 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x97B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x9FF PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xE7E JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE DUP3 DUP5 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH32 0xE3DEC8FB00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP5 DIV DUP5 AND PUSH1 0x44 DUP4 ADD DUP2 DUP2 MSTORE PUSH32 0x0 DUP1 DUP8 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x60 PUSH1 0x84 DUP7 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP8 ADD MSTORE DUP7 MLOAD PUSH32 0x0 SWAP1 SWAP9 AND SWAP8 PUSH4 0xE3DEC8FB SWAP8 SWAP5 SWAP7 SWAP3 SWAP6 SWAP2 SWAP3 PUSH1 0xC4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC06 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBEE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC33 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD61 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xDD1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xEFE PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xDDE PUSH2 0xA06 JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0xE8C JUMPI PUSH2 0xE8C DUP2 PUSH2 0xE90 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xDE SHR 0x5C 0xE PUSH26 0xEB01D25E6AE7FAD368706DFBCB4F825CDC57959F91F6FF30B26E PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "999:1573:66:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6514:191:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6514:191:58;;;;:::i;:::-;;;;;;;;;;;;;;;;1833:99:66;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6408:100:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6408:100:58;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6711:92;;;;;;;;;;;;;:::i;6878:154::-;;;;;;;;;;;;;:::i;:::-;;3432:2685;;;:::i;1635:192:66:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1635:192:66;;;;:::i;7112:157:58:-;;;;;;;;;;;;;:::i;1938:125:66:-;;;;;;;;;;;;;:::i;2069:114::-;;;;;;;;;;;;;:::i;6514:191:58:-;6588:7;6615:21;;;6631:4;6615:21;6607:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6688:10:58;;;6514:191::o;1833:99:66:-;1915:10;;;;;;;1833:99;;:::o;6408:100:58:-;-1:-1:-1;6497:4:58;;6408:100::o;6711:92::-;6787:9;;;;6711:92;:::o;6878:154::-;6935:10;:41;6957:18;6935:41;;6927:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:9;:16;;;;7021:4;7009:16;;;6878:154::o;3432:2685::-;3502:4;2613:20:44;:18;:20::i;:::-;3526:10:58::1;:41;3548:18;3526:41;;3518:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3621:7;::::0;3600:18:::1;3662:16;:14;:16::i;:::-;3638:40;;3706:13;3693:10;:26;3689:2400;;;3735:48;::::0;;;;;3777:4:::1;3735:48;::::0;::::1;::::0;;;:33:::1;:16;:33;::::0;::::1;::::0;:48;;;;;-1:-1:-1;;3735:48:58;;;;;;;-1:-1:-1;3735:33:58;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3813:5:58::1;::::0;;3923:15:::1;::::0;3870;;;::::1;::::0;3813:5;;-1:-1:-1;3798:12:58::1;::::0;-1:-1:-1;3941:20:58::1;3923:38;3870:15:::0;3975:1869:::1;4008:10;4021:3;4008:16;4004:1;:20;3975:1869;;;4057:13;4053:1;:17;4049:28;;;4072:5;;4049:28;4212:65;::::0;;;;;4259:4:::1;4212:65;::::0;::::1;::::0;4121:7:::1;4117:11:::0;::::1;4212:65:::0;;;;;;;;4096:18:::1;::::0;;;4212:38:::1;:16;:38;::::0;::::1;::::0;:65;;;;;::::1;::::0;;;;;;;;4096:18;4212:38;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4212:65:58;;-1:-1:-1;4300:27:58;;::::1;::::0;::::1;::::0;:67:::1;;;4347:10;4360:7;4347:20;4331:13;:36;4300:67;4296:1424;;;4946:26:::0;;::::1;5059:6;5012:18:::0;;::::1;:43:::0;::::1;5011:54;4994:71;;5174:27;5153:17;5146:4;:24;5145:56;;;;;;::::0;-1:-1:-1;5329:7:58::1;:32:::0;;::::1;5445:6;5402:18:::0;;::::1;:39:::0;::::1;5474:5;:12:::0;;;5508:15:::1;:31:::0;;;5578:20:::1;5561:37:::0;;::::1;::::0;5401:50:::1;5383:68:::0;;;::::1;::::0;-1:-1:-1;4296:1424:58::1;::::0;-1:-1:-1;4296:1424:58::1;;5695:6;5684:7;5663:18:::0;;::::1;:28;5662:39;5645:56;;4296:1424;5743:38;::::0;;;;;;;5754:10;;5743:38:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;5799:30:58;;;::::1;::::0;-1:-1:-1;4026:3:58::1;;3975:1869;;;-1:-1:-1::0;5858:7:58::1;:23:::0;;;5895:10:::1;:26:::0;;;::::1;::::0;;5940:16;;;;;:30:::1;;-1:-1:-1::0;5961:9:58::1;::::0;::::1;;5960:10;5940:30;5936:143;;;5990:27;::::0;;;;;6011:4:::1;5990:27;::::0;::::1;::::0;;;:12:::1;:7;:12;::::0;::::1;::::0;:27;;;;;::::1;::::0;;;;;;;;-1:-1:-1;5990:12:58;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6035:29:58::1;::::0;-1:-1:-1;6051:12:58;6035:15:::1;:29::i;:::-;3689:2400;;;;6106:4;6099:11;;;;2654:19:44::0;:17;:19::i;1635:192:66:-;1764:23;:21;:23::i;:::-;1798:10;:22;;;;;;;;;;;;;;;;;;1635:192::o;7112:157:58:-;7171:10;:41;7193:18;7171:41;;7163:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7245:9;:17;;;;;;7112:157::o;1938:125:66:-;2032:24;1938:125;:::o;2069:114::-;2154:22;2069:114;:::o;2686:271:44:-;2809:48;2113:1;2818:7;;:19;;8984:3:20;2809:8:44;:48::i;:::-;2113:1;2932:7;:18;2686:271::o;6123:167:58:-;6252:31;6271:7;6253:15;:25;6252:31;;6123:167::o;2189:381:66:-;2346:9;:17;;;2364:22;2388:10;2346:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2517:10:66;;2540:22;;;2346:53;2540:22;;;;;;;;;;;;;;;;;;;;;;2481:82;;;;:35;2517:10;;;;;;2481:82;;;;;;2529:9;2481:82;;;;;;;;;;;;;;;;;;;;;;:24;:35;;;;;;2517:10;;2529:9;;2481:82;;;;;;;;;;;-1:-1:-1;2481:82:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2189:381;:::o;2963:208:44:-;2070:1;3142:7;:22;2963:208::o;2956:470:58:-;3016:7;;:12;3008:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3198:12;3213:11;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3213:18:58;;-1:-1:-1;3249:9:58;3241:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3310:5;:12;;;3342:16;:14;:16::i;:::-;3332:7;:26;;;;3386:11;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3386:33:58;3368:15;:51;-1:-1:-1;2956:470:58:o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;:::-;866:101;;:::o;1074:3172::-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "methodIdentifiers": { + "checkpoint()": "c2c4c5c1", + "getPolygonBridge()": "fe022cc9", + "getPolygonERC20Predicate()": "fe33859e", + "getRecipient()": "1b88094d", + "initialize(address)": "c4d66de8", + "integrate_fraction(address)": "09400707", + "is_killed()": "9c868ac0", + "killGauge()": "ab8f0945", + "unkillGauge()": "d34fb267", + "user_checkpoint(address)": "4b820093" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBalancerMinter\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"contract IPolygonRootChainManager\",\"name\":\"polygonRootChainManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"polygonERC20Predicate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"periodTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"periodEmissions\",\"type\":\"uint256\"}],\"name\":\"Checkpoint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPolygonBridge\",\"outputs\":[{\"internalType\":\"contract IPolygonRootChainManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPolygonERC20Predicate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"integrate_fraction\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_killed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"killGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unkillGauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"user_checkpoint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"killGauge()\":{\"notice\":\"Kills the gauge so it cannot mint BAL\"},\"unkillGauge()\":{\"notice\":\"Unkills the gauge so it can mint BAL again\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/polygon/PolygonRootGauge.sol\":\"PolygonRootGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]},\"contracts/gauges/polygon/PolygonRootGauge.sol\":{\"keccak256\":\"0x93b53d33dfd82b9705b8ad1e8b68b70c5eadd2f6a532392d25ed6734e1eb6e0c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://36114a86f27c30a03227fc8d3ad7649169d40af5de3e25466d14ec04bda745ee\",\"dweb:/ipfs/Qmc37RModnRt4tq6q1koie9vVGn7zc11VdcECycnPUuMSA\"]}},\"version\":1}" + } + }, + "contracts/gauges/polygon/PolygonRootGaugeFactory.sol": { + "PolygonRootGaugeFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IBalancerMinter", + "name": "minter", + "type": "address" + }, + { + "internalType": "contract IPolygonRootChainManager", + "name": "polygonRootChainManager", + "type": "address" + }, + { + "internalType": "address", + "name": "polygonERC20Predicate", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "PolygonRootGaugeCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getGaugeImplementation", + "outputs": [ + { + "internalType": "contract ISingleRecipientGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "getGaugeRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "getRecipientGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50604051611a99380380611a9983398101604081905261002f9161009d565b82828260405161003e90610090565b61004a939291906100e9565b604051809103906000f080158015610066573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905550610124915050565b6113df806106ba83390190565b6000806000606084860312156100b1578283fd5b83516100bc8161010c565b60208501519093506100cd8161010c565b60408501519092506100de8161010c565b809150509250925092565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b038116811461012157600080fd5b50565b610587806101336000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639ed93318116100505780639ed933181461009d578063ce3cc8bd146100b0578063fa72ce95146100d057610067565b806339312dee1461006c5780637d5d0d101461008a575b600080fd5b6100746100e3565b6040516100819190610492565b60405180910390f35b610074610098366004610453565b6100ff565b6100746100ab366004610453565b61012d565b6100c36100be366004610453565b6102f5565b60405161008191906104b3565b6100746100de366004610453565b610320565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054165b919050565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526002602052604081205490911615610197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104be565b60405180910390fd5b600080546101ba9073ffffffffffffffffffffffffffffffffffffffff166103a6565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de89061020f908690600401610492565b600060405180830381600087803b15801561022957600080fd5b505af115801561023d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff818116600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255938716808352600290945280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517f75d10ca42c0d6da28eb371f9b49d012d2429f61681a865c2ec6d9933a560e4119190a392915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60008173ffffffffffffffffffffffffffffffffffffffff16631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036857600080fd5b505afa15801561037c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a09190610476565b92915050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116610128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104f5565b600060208284031215610464578081fd5b813561046f8161052c565b9392505050565b600060208284031215610487578081fd5b815161046f8161052c565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461054e57600080fd5b5056fea2646970667358221220508a5c02befc99f42c55e47d87ac53db5e5f17c5ee91c19ffdadc2e29f4bb0bb64736f6c634300070100336101c06040523480156200001257600080fd5b50604051620013df380380620013df833981810160405260608110156200003857600080fd5b50805160208083015160409384015160016000908155855163e6dec36f60e01b81529551949592949193869391926001600160a01b0385169263e6dec36f926004808301939192829003018186803b1580156200009457600080fd5b505afa158015620000a9573d6000803e3d6000fd5b505050506040513d6020811015620000c057600080fd5b50516040805163c003969960e01b815290519192506000916001600160a01b0384169163c0039699916004808301926020929190829003018186803b1580156200010957600080fd5b505afa1580156200011e573d6000803e3d6000fd5b505050506040513d60208110156200013557600080fd5b505160408051632c6f4d6f60e11b815290519192506000916001600160a01b038616916358de9ade916004808301926020929190829003018186803b1580156200017e57600080fd5b505afa15801562000193573d6000803e3d6000fd5b505050506040513d6020811015620001aa57600080fd5b50516001600160601b0319606084811b821660805285811b821660a05286811b821660c05282901b1660e052604080516303e1469160e61b815290519192506001600160a01b0383169163f851a44091600480820192602092909190829003018186803b1580156200021b57600080fd5b505afa15801562000230573d6000803e3d6000fd5b505050506040513d60208110156200024757600080fd5b505160601b6001600160601b0319166101005260408051635c3dab0b60e11b815290516001600160a01b0385169163b87b5616916004808301926020929190829003018186803b1580156200029b57600080fd5b505afa158015620002b0573d6000803e3d6000fd5b505050506040513d6020811015620002c757600080fd5b505161012052604080516321609bbf60e01b815290516001600160a01b038516916321609bbf916004808301926020929190829003018186803b1580156200030e57600080fd5b505afa15801562000323573d6000803e3d6000fd5b505050506040513d60208110156200033a57600080fd5b505161014052604080516303f7d6c760e51b815290516001600160a01b03851691637efad8e0916004808301926020929190829003018186803b1580156200038157600080fd5b505afa15801562000396573d6000803e3d6000fd5b505050506040513d6020811015620003ad57600080fd5b505161016052505060001960025550506001600160601b0319606092831b811661018052911b166101a0525060805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205161014051610160516101805160601c6101a05160601c610f5762000488600039806109cb5280610a6f5250806109a75280610bb25250806106b152508061069052508061055a52806106fd52508061032452806103ff52806108ef5250806104e852806105ec5250806107f3525080610ce95280610de6525080610a335280610b775250610f576000f3fe6080604052600436106100b15760003560e01c8063c2c4c5c111610069578063d34fb2671161004e578063d34fb2671461020e578063fe022cc914610223578063fe33859e14610238576100b1565b8063c2c4c5c1146101c6578063c4d66de8146101ce576100b1565b80634b8200931161009a5780634b820093146101465780639c868ac01461019a578063ab8f0945146101af576100b1565b806309400707146100b65780631b88094d14610108575b600080fd5b3480156100c257600080fd5b506100f6600480360360208110156100d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b60408051918252519081900360200190f35b34801561011457600080fd5b5061011d6102db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561015257600080fd5b506101866004803603602081101561016957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166102fd565b604080519115158252519081900360200190f35b3480156101a657600080fd5b50610186610303565b3480156101bb57600080fd5b506101c461030c565b005b6101866103dd565b3480156101da57600080fd5b506101c4600480360360208110156101f157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610883565b34801561021a57600080fd5b506101c46108d7565b34801561022f57600080fd5b5061011d6109a5565b34801561024457600080fd5b5061011d6109c9565b600073ffffffffffffffffffffffffffffffffffffffff821630146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f47617567652063616e206f6e6c79206d696e7420666f7220697473656c660000604482015290519081900360640190fd5b505060045490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff165b90565b50600190565b60055460ff1690565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60006103e76109ed565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461048b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6002546000610498610a06565b90508082101561087557604080517f615e5237000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163615e523791602480830192600092919082900301818387803b15801561052f57600080fd5b505af1158015610543573d6000803e3d6000fd5b5050600180546003549590910194909250600091507f000000000000000000000000000000000000000000000000000000000000000001845b8560ff01811015610788578481111561059457610788565b604080517fd3078c9400000000000000000000000000000000000000000000000000000000815230600482015262093a808302602482018190529151600091829173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163d3078c9491604480830192602092919082900301818787803b15801561063357600080fd5b505af1158015610647573d6000803e3d6000fd5b505050506040513d602081101561065d57600080fd5b5051905082851080159061067557508262093a800185105b1561072e57828503670de0b6b3a764000082890282020492507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008902816106d957fe5b04975062093a80819003670de0b6b3a7640000838a02820260018b905560038990557f000000000000000000000000000000000000000000000000000000000000000090980197049390930192506107439050565b670de0b6b3a764000062093a80828902020491505b60408051838152905184917f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced919081900360200190a25093909301925060010161057c565b506002849055600480548301905581158015906107a8575060055460ff16155b1561087157604080517f6a627842000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691636a6278429160248083019260209291908290030181600087803b15801561083b57600080fd5b505af115801561084f573d6000803e3d6000fd5b505050506040513d602081101561086557600080fd5b50610871905082610a31565b5050505b6001925050506102fa610c6f565b61088b610c76565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461097b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f53454e4445525f4e4f545f414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6109ff60026000541415610190610e7e565b6002600055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62093a8042040190565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b505050506040513d6020811015610b0c57600080fd5b5050600554604080516020808201859052825180830382018152828401938490527fe3dec8fb0000000000000000000000000000000000000000000000000000000090935273ffffffffffffffffffffffffffffffffffffffff6101009094048416604483018181527f00000000000000000000000000000000000000000000000000000000000000008087166064860152606060848601908152865160a487015286517f00000000000000000000000000000000000000000000000000000000000000009098169763e3dec8fb9794969295919260c4019185019080838360005b83811015610c06578181015183820152602001610bee565b50505050905090810190601f168015610c335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610c5457600080fd5b505af1158015610c68573d6000803e3d6000fd5b5050505050565b6001600055565b60025415610ce557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632c4e722e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4d57600080fd5b505afa158015610d61573d6000803e3d6000fd5b505050506040513d6020811015610d7757600080fd5b5051905080610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610efe6024913960400191505060405180910390fd5b6001819055610dde610a06565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a228bced6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e4c57600080fd5b505af1158015610e60573d6000803e3d6000fd5b505050506040513d6020811015610e7657600080fd5b505160035550565b81610e8c57610e8c81610e90565b5050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564a264697066735822122088de1c5c0e79eb01d25e6ae7fad368706dfbcb4f825cdc57959f91f6ff30b26e64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1A99 CODESIZE SUB DUP1 PUSH2 0x1A99 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x9D JUMP JUMPDEST DUP3 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH2 0x3E SWAP1 PUSH2 0x90 JUMP JUMPDEST PUSH2 0x4A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x66 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 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 PUSH2 0x124 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x13DF DUP1 PUSH2 0x6BA DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH2 0xBC DUP2 PUSH2 0x10C JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0xCD DUP2 PUSH2 0x10C JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0xDE DUP2 PUSH2 0x10C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST 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 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x587 DUP1 PUSH2 0x133 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 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9ED93318 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0xFA72CE95 EQ PUSH2 0xD0 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x7D5D0D10 EQ PUSH2 0x8A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74 PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x492 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x74 PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0xFF JUMP JUMPDEST PUSH2 0x74 PUSH2 0xAB CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x2F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x4B3 JUMP JUMPDEST PUSH2 0x74 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x320 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x197 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x1BA SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x20F SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x492 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0x75D10CA42C0D6DA28EB371F9B49D012D2429F61681A865C2EC6D9933A560E411 SWAP2 SWAP1 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1B88094D 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x3A0 SWAP2 SWAP1 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x128 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4F5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x464 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x487 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP DUP11 0x5C MUL 0xBE 0xFC SWAP10 DELEGATECALL 0x2C SSTORE 0xE4 PUSH30 0x87AC53DB5E5F17C5EE91C19FFDADC2E29F4BB0BB64736F6C634300070100 CALLER PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x13DF CODESIZE SUB DUP1 PUSH3 0x13DF DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 SWAP4 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE DUP6 MLOAD PUSH4 0xE6DEC36F PUSH1 0xE0 SHL DUP2 MSTORE SWAP6 MLOAD SWAP5 SWAP6 SWAP3 SWAP5 SWAP2 SWAP4 DUP7 SWAP4 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP3 PUSH4 0xE6DEC36F SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xC0039699 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0xC0039699 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x2C6F4D6F PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x58DE9ADE SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x193 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 DUP2 SHL DUP3 AND PUSH1 0x80 MSTORE DUP6 DUP2 SHL DUP3 AND PUSH1 0xA0 MSTORE DUP7 DUP2 SHL DUP3 AND PUSH1 0xC0 MSTORE DUP3 SWAP1 SHL AND PUSH1 0xE0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0xF851A440 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x230 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5C3DAB0B PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0xB87B5616 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x2B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x120 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x21609BBF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x21609BBF SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x30E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x323 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x3F7D6C7 PUSH1 0xE5 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x7EFAD8E0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x396 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x160 MSTORE POP POP PUSH1 0x0 NOT PUSH1 0x2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP3 DUP4 SHL DUP2 AND PUSH2 0x180 MSTORE SWAP2 SHL AND PUSH2 0x1A0 MSTORE POP PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH1 0x60 SHR PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0xF57 PUSH3 0x488 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x9CB MSTORE DUP1 PUSH2 0xA6F MSTORE POP DUP1 PUSH2 0x9A7 MSTORE DUP1 PUSH2 0xBB2 MSTORE POP DUP1 PUSH2 0x6B1 MSTORE POP DUP1 PUSH2 0x690 MSTORE POP DUP1 PUSH2 0x55A MSTORE DUP1 PUSH2 0x6FD MSTORE POP DUP1 PUSH2 0x324 MSTORE DUP1 PUSH2 0x3FF MSTORE DUP1 PUSH2 0x8EF MSTORE POP DUP1 PUSH2 0x4E8 MSTORE DUP1 PUSH2 0x5EC MSTORE POP DUP1 PUSH2 0x7F3 MSTORE POP DUP1 PUSH2 0xCE9 MSTORE DUP1 PUSH2 0xDE6 MSTORE POP DUP1 PUSH2 0xA33 MSTORE DUP1 PUSH2 0xB77 MSTORE POP PUSH2 0xF57 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB1 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC2C4C5C1 GT PUSH2 0x69 JUMPI DUP1 PUSH4 0xD34FB267 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xD34FB267 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0xFE022CC9 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0xFE33859E EQ PUSH2 0x238 JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0xC2C4C5C1 EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x1CE JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0x4B820093 GT PUSH2 0x9A JUMPI DUP1 PUSH4 0x4B820093 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x9C868AC0 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xAB8F0945 EQ PUSH2 0x1AF JUMPI PUSH2 0xB1 JUMP JUMPDEST DUP1 PUSH4 0x9400707 EQ PUSH2 0xB6 JUMPI DUP1 PUSH4 0x1B88094D EQ PUSH2 0x108 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x24D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x2DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x186 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x186 PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH2 0x30C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x186 PUSH2 0x3DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x883 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C4 PUSH2 0x8D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x9A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11D PUSH2 0x9C9 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x2D3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x47617567652063616E206F6E6C79206D696E7420666F7220697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x3B0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E7 PUSH2 0x9ED JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x48B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 PUSH2 0x498 PUSH2 0xA06 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0x875 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x615E523700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x615E5237 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x3 SLOAD SWAP6 SWAP1 SWAP2 ADD SWAP5 SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH32 0x0 ADD DUP5 JUMPDEST DUP6 PUSH1 0xFF ADD DUP2 LT ISZERO PUSH2 0x788 JUMPI DUP5 DUP2 GT ISZERO PUSH2 0x594 JUMPI PUSH2 0x788 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xD3078C9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH3 0x93A80 DUP4 MUL PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0xD3078C94 SWAP2 PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP8 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x647 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x65D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP3 DUP6 LT DUP1 ISZERO SWAP1 PUSH2 0x675 JUMPI POP DUP3 PUSH3 0x93A80 ADD DUP6 LT JUMPDEST ISZERO PUSH2 0x72E JUMPI DUP3 DUP6 SUB PUSH8 0xDE0B6B3A7640000 DUP3 DUP10 MUL DUP3 MUL DIV SWAP3 POP PUSH32 0x0 PUSH32 0x0 DUP10 MUL DUP2 PUSH2 0x6D9 JUMPI INVALID JUMPDEST DIV SWAP8 POP PUSH3 0x93A80 DUP2 SWAP1 SUB PUSH8 0xDE0B6B3A7640000 DUP4 DUP11 MUL DUP3 MUL PUSH1 0x1 DUP12 SWAP1 SSTORE PUSH1 0x3 DUP10 SWAP1 SSTORE PUSH32 0x0 SWAP1 SWAP9 ADD SWAP8 DIV SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH2 0x743 SWAP1 POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH3 0x93A80 DUP3 DUP10 MUL MUL DIV SWAP2 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x21D81D5D656869E8CE3BA8D65526A2F0DBBCD3D36F5F9999EB7C84360E45ECED SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP SWAP4 SWAP1 SWAP4 ADD SWAP3 POP PUSH1 0x1 ADD PUSH2 0x57C JUMP JUMPDEST POP PUSH1 0x2 DUP5 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD DUP4 ADD SWAP1 SSTORE DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x7A8 JUMPI POP PUSH1 0x5 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x871 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A62784200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH4 0x6A627842 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x83B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x84F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x871 SWAP1 POP DUP3 PUSH2 0xA31 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x2FA PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x88B PUSH2 0xC76 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x97B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53454E4445525F4E4F545F414C4C4F5745440000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x9FF PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x190 PUSH2 0xE7E JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH3 0x93A80 TIMESTAMP DIV ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 PUSH32 0x0 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP3 ADD DUP2 MSTORE DUP3 DUP5 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH32 0xE3DEC8FB00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP5 DIV DUP5 AND PUSH1 0x44 DUP4 ADD DUP2 DUP2 MSTORE PUSH32 0x0 DUP1 DUP8 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x60 PUSH1 0x84 DUP7 ADD SWAP1 DUP2 MSTORE DUP7 MLOAD PUSH1 0xA4 DUP8 ADD MSTORE DUP7 MLOAD PUSH32 0x0 SWAP1 SWAP9 AND SWAP8 PUSH4 0xE3DEC8FB SWAP8 SWAP5 SWAP7 SWAP3 SWAP6 SWAP2 SWAP3 PUSH1 0xC4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC06 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xBEE JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC33 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416C726561647920696E697469616C697A656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2C4E722E 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD61 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 PUSH2 0xDD1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xEFE PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH2 0xDDE PUSH2 0xA06 JUMP JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA228BCED PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SSTORE POP JUMP JUMPDEST DUP2 PUSH2 0xE8C JUMPI PUSH2 0xE8C DUP2 PUSH2 0xE90 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID TIMESTAMP PUSH2 0x6C61 PUSH15 0x636572546F6B656E41646D696E206E PUSH16 0x742079657420616374697661746564A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xDE SHR 0x5C 0xE PUSH26 0xEB01D25E6AE7FAD368706DFBCB4F825CDC57959F91F6FF30B26E PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "959:2374:67:-:0;;;1289:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1490:6;1498:23;1523:21;1469:76;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1446:20:67;:99;;-1:-1:-1;;;;;;1446:99:67;-1:-1:-1;;;;;1446:99:67;;;;;;;;;;-1:-1:-1;959:2374:67;;-1:-1:-1;;959:2374:67;;;;;;;;;:::o;542:649:-1:-;;;;748:2;736:9;727:7;723:23;719:32;716:2;;;-1:-1;;754:12;716:2;253:6;247:13;265:56;315:5;265:56;:::i;:::-;940:2;1024:22;;445:13;806:97;;-1:-1;463:67;445:13;463:67;:::i;:::-;1093:2;1143:22;;83:13;948:108;;-1:-1;101:33;83:13;101:33;:::i;:::-;1101:74;;;;710:481;;;;;:::o;1698:558::-;-1:-1;;;;;2676:54;;;1412:73;;2676:54;;;2159:2;2144:18;;1412:73;2676:54;;;2242:2;2227:18;;1269:37;1938:2;1923:18;;1909:347::o;3399:117::-;-1:-1;;;;;2676:54;;3458:35;;3448:2;;3507:1;;3497:12;3448:2;3442:74;:::o;:::-;959:2374:67;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100675760003560e01c80639ed93318116100505780639ed933181461009d578063ce3cc8bd146100b0578063fa72ce95146100d057610067565b806339312dee1461006c5780637d5d0d101461008a575b600080fd5b6100746100e3565b6040516100819190610492565b60405180910390f35b610074610098366004610453565b6100ff565b6100746100ab366004610453565b61012d565b6100c36100be366004610453565b6102f5565b60405161008191906104b3565b6100746100de366004610453565b610320565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902054165b919050565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526002602052604081205490911615610197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104be565b60405180910390fd5b600080546101ba9073ffffffffffffffffffffffffffffffffffffffff166103a6565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063c4d66de89061020f908690600401610492565b600060405180830381600087803b15801561022957600080fd5b505af115801561023d573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff818116600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255938716808352600290945280822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517f75d10ca42c0d6da28eb371f9b49d012d2429f61681a865c2ec6d9933a560e4119190a392915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60008173ffffffffffffffffffffffffffffffffffffffff16631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561036857600080fd5b505afa15801561037c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a09190610476565b92915050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116610128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018e906104f5565b600060208284031215610464578081fd5b813561046f8161052c565b9392505050565b600060208284031215610487578081fd5b815161046f8161052c565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c726561647920657869737473000000000000000000000000604082015260600190565b60208082526016908201527f455243313136373a20637265617465206661696c656400000000000000000000604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff8116811461054e57600080fd5b5056fea2646970667358221220508a5c02befc99f42c55e47d87ac53db5e5f17c5ee91c19ffdadc2e29f4bb0bb64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9ED93318 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x9ED93318 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0xB0 JUMPI DUP1 PUSH4 0xFA72CE95 EQ PUSH2 0xD0 JUMPI PUSH2 0x67 JUMP JUMPDEST DUP1 PUSH4 0x39312DEE EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x7D5D0D10 EQ PUSH2 0x8A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74 PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x492 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x74 PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0xFF JUMP JUMPDEST PUSH2 0x74 PUSH2 0xAB CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH2 0xC3 PUSH2 0xBE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x2F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x4B3 JUMP JUMPDEST PUSH2 0x74 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x453 JUMP JUMPDEST PUSH2 0x320 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x197 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x1BA SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC4D66DE800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xC4D66DE8 SWAP1 PUSH2 0x20F SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x492 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE PUSH1 0x2 SWAP1 SWAP5 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0x75D10CA42C0D6DA28EB371F9B49D012D2429F61681A865C2EC6D9933A560E411 SWAP2 SWAP1 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1B88094D 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 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x3A0 SWAP2 SWAP1 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH32 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x60 SHL PUSH1 0x14 DUP3 ADD MSTORE PUSH32 0x5AF43D82803E903D91602B57FD5BF30000000000000000000000000000000000 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x37 DUP2 PUSH1 0x0 CREATE SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x128 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18E SWAP1 PUSH2 0x4F5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x464 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x487 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x46F DUP2 PUSH2 0x52C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP DUP11 0x5C MUL 0xBE 0xFC SWAP10 DELEGATECALL 0x2C SSTORE 0xE4 PUSH30 0x87AC53DB5E5F17C5EE91C19FFDADC2E29F4BB0BB64736F6C634300070100 CALLER ", + "sourceMap": "959:2374:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1659:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2091:162;;;;;;:::i;:::-;;:::i;2872:459::-;;;;;;:::i;:::-;;:::i;1871:131::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2324:150::-;;;;;;:::i;:::-;;:::i;1659:122::-;1714:21;1754:20;;;1659:122;:::o;2091:162::-;2219:26;;;;2169:15;2219:26;;;:15;:26;;;;;;;2091:162;;;;:::o;2872:459::-;2961:40;:26;;;2934:7;2961:26;;;:15;:26;;;;;;2934:7;;2961:26;:40;2953:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3037:13;3074:20;;3053:43;;3074:20;;3053:12;:43::i;:::-;3107:50;;;;;3037:59;;-1:-1:-1;3107:39:67;;;;;;:50;;3147:9;;3107:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;3168:26:67;;;;;;;;3197:4;3168:26;;;;;;;;:33;;;;;;;;;;3211:26;;;;;;:15;:26;;;;;;:34;;;;;;;;3260:41;;;3168:26;3260:41;3319:5;2872:459;-1:-1:-1;;2872:459:67:o;1871:131::-;1969:26;;1946:4;1969:26;;;:19;:26;;;;;;;;;1871:131::o;2324:150::-;2398:7;2446:5;2424:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2417:50;2324:150;-1:-1:-1;;2324:150:67:o;1001:515:38:-;1058:16;1126:4;1120:11;1156:66;1151:3;1144:79;1269:14;1263:4;1259:25;1252:4;1247:3;1243:14;1236:49;1321:66;1314:4;1309:3;1305:14;1298:90;1428:4;1423:3;1420:1;1413:20;1401:32;-1:-1:-1;;1460:22:38;;;1452:57;;;;;;;;;;;;:::i;283:241:-1:-;;387:2;375:9;366:7;362:23;358:32;355:2;;;-1:-1;;393:12;355:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;445:63;349:175;-1:-1;;;349:175::o;531:263::-;;646:2;634:9;625:7;621:23;617:32;614:2;;;-1:-1;;652:12;614:2;226:6;220:13;238:33;265:5;238:33;:::i;2062:222::-;4351:42;4340:54;;;;872:37;;2189:2;2174:18;;2160:124::o;2291:210::-;4252:13;;4245:21;986:34;;2412:2;2397:18;;2383:118::o;3070:416::-;3270:2;3284:47;;;1627:2;3255:18;;;4020:19;1663:22;4060:14;;;1643:43;1705:12;;;3241:245::o;3493:416::-;3693:2;3707:47;;;1956:2;3678:18;;;4020:19;1992:24;4060:14;;;1972:45;2036:12;;;3664:245::o;5048:117::-;4351:42;5135:5;4340:54;5110:5;5107:35;5097:2;;5156:1;;5146:12;5097:2;5091:74;:::o" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getGaugeImplementation()": "39312dee", + "getGaugeRecipient(address)": "fa72ce95", + "getRecipientGauge(address)": "7d5d0d10", + "isGaugeFromFactory(address)": "ce3cc8bd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IBalancerMinter\",\"name\":\"minter\",\"type\":\"address\"},{\"internalType\":\"contract IPolygonRootChainManager\",\"name\":\"polygonRootChainManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"polygonERC20Predicate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"PolygonRootGaugeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGaugeImplementation\",\"outputs\":[{\"internalType\":\"contract ISingleRecipientGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"getGaugeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"getRecipientGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(address)\":{\"details\":\"Care must be taken to ensure that gauges deployed from this factory are suitable before they are added to the GaugeController.\",\"params\":{\"recipient\":\"The address to receive BAL minted from the gauge\"},\"returns\":{\"_0\":\"The address of the deployed gauge\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create(address)\":{\"notice\":\"Deploys a new gauge which bridges all of its BAL allowance to a single recipient on Polygon.\"},\"getGaugeImplementation()\":{\"notice\":\"Returns the address of the implementation used for gauge deployments.\"},\"getGaugeRecipient(address)\":{\"notice\":\"Returns the recipient of `gauge`.\"},\"getRecipientGauge(address)\":{\"notice\":\"Returns the gauge which sends funds to `recipient`.\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/gauges/polygon/PolygonRootGaugeFactory.sol\":\"PolygonRootGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol\":{\"keccak256\":\"0x286a4b1cb4a632954e58c68baac671fb0dcbd139c5a353b0419088b0de40477c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0b57ab7eadc573d8d23b3668b90412e65182beea79726c1a1b8cb57f76abc74a\",\"dweb:/ipfs/QmfNe6Uu4S4xMDzMktJnGz92MT6zVENi3Rye2AazUcrLL4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol\":{\"keccak256\":\"0x6975f1e2199b1d9e4fff7133f9e9ab652e2f378d38551d33393eec50f459574a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c4b81b8bb50d58afee844cdc06a04bca72b379f51eda3289a9cc4ff97a80dfc\",\"dweb:/ipfs/QmR1b9e6Ku7H3ea4yBGmUznqabtioTkktRWvhZFgRUZWy4\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol\":{\"keccak256\":\"0x3b9e1e7098293244e9e4b1b1e26f973949bea15e2477115fadf4b5157fcab9de\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cc5542e3a2546434ba0de87e5a3937ef0a7816cda2bc25eaaa7e8ddba2d4e281\",\"dweb:/ipfs/QmNZDUex4e3TdkxLrEyqEyusBpC4xfETwvgrqHUEyGkYNE\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol\":{\"keccak256\":\"0x06bf1774686dc7d0128742602a38487d8f3419a0e536293111d280fa47c1b09d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8ecc62e8aa7e4043f48461e712d827ad2a197158787752a4b93746b11ec755e3\",\"dweb:/ipfs/QmbVLFmf3dTpHd6BVf3KfZ4kq8A5PfPd24coZKsNiKXbBS\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol\":{\"keccak256\":\"0x0fbfdb1443cb651d81d7b2a7bf5d4211f96a3cf2698d83af9653f701e9b10f26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c65076fedf4ab56455d4d94fde8547b6610b71ca16a7cf9ead88ef68ca2262a7\",\"dweb:/ipfs/QmPCo9osP53Ay871mk4sWxuAki7oq4odCtjpY3wpS743cn\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol\":{\"keccak256\":\"0x1e377f8d163d624e24dea8f3c8e38e18e56e8b87e7654dc14efffd53e022e774\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://935d78b37a8e78fc0e06fe818be751a956269ace1597a5b6666c432196f828b3\",\"dweb:/ipfs/Qmee93PLdq43UZczR1nkSXfzimz9smUuiEPSz2GK2YScbR\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":{\"keccak256\":\"0x0ef386c5d211024ce07fd77245128db56fdfd2aae7e5e4232b72fb0cecb6be03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f09b20288f085f7a2ce289a8b1676d2d873e76a25929fbd9328e2d722225b5\",\"dweb:/ipfs/QmbVW5u6dSXsTBb66tKHS9QN5RPonEcpNzAjJ1nBe8UVRi\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol\":{\"keccak256\":\"0x5307df1dd5e4a781ced6167873d3a2ea08d000741f1db8bcf5e12fde4b1a098d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669e378e0dd6083d04a6878f2c5b871ddf91e1d9c5c24e6c814589948ad34133\",\"dweb:/ipfs/QmcysgpZHtQgqo6JqYMp3o5GxWy2y5hbK3RDu2kSSgedHv\"]},\"contracts/gauges/StakelessGauge.sol\":{\"keccak256\":\"0x78b99052d6eefd855d1bfa11c124bc9b9bc3c881991702b22596e03a51eab4ed\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c214c5b9100bad4fdac19289b0c8ae1008241b214bc1adb4d4fa5ea179a718c8\",\"dweb:/ipfs/QmRVa9ptjputXgve6pxKdpJGczqvNNbCCUuCe3UTJMCR21\"]},\"contracts/gauges/polygon/PolygonRootGauge.sol\":{\"keccak256\":\"0x93b53d33dfd82b9705b8ad1e8b68b70c5eadd2f6a532392d25ed6734e1eb6e0c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://36114a86f27c30a03227fc8d3ad7649169d40af5de3e25466d14ec04bda745ee\",\"dweb:/ipfs/Qmc37RModnRt4tq6q1koie9vVGn7zc11VdcECycnPUuMSA\"]},\"contracts/gauges/polygon/PolygonRootGaugeFactory.sol\":{\"keccak256\":\"0xb34cc97f5734f0ff9932ce0ee8f250146cf3b4f4d73fdc6293c1a4f1077e0f56\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8237d850b385b0ec2fe8b37451615813e34937d8dd56bb2078a35a9396fa6b5\",\"dweb:/ipfs/QmSuj6A4eBMYDtz35YZXsPg6j28K4ezRVTBtv4dhnU58KX\"]}},\"version\":1}" + } + }, + "contracts/test/MockGaugeController.sol": { + "MockGaugeController": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVotingEscrow", + "name": "votingEscrow", + "type": "address" + }, + { + "internalType": "contract IAuthorizerAdaptor", + "name": "authorizerAdaptor", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "indexed": false, + "internalType": "int128", + "name": "gauge_type", + "type": "int128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "weight", + "type": "uint256" + } + ], + "name": "NewGauge", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "internalType": "int128", + "name": "gaugeType", + "type": "int128" + } + ], + "name": "add_gauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "add_type", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "contract IAuthorizerAdaptor", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int128", + "name": "", + "type": "int128" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "change_type_weight", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "checkpoint_gauge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "gauge_relative_weight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "gauge_types", + "outputs": [ + { + "internalType": "int128", + "name": "", + "type": "int128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "n_gauge_types", + "outputs": [ + { + "internalType": "int128", + "name": "", + "type": "int128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "voting_escrow", + "outputs": [ + { + "internalType": "contract IVotingEscrow", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506040516106853803806106858339818101604052604081101561003357600080fd5b508051602090910151600480546001600160a01b039384166001600160a01b0319918216179091556003805493909216921691909117905561060b8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063d3078c9411610076578063dfe050311161005b578063dfe0503114610267578063f851a44014610298578063fc0c546a146102a0576100be565b8063d3078c94146101f6578063db1ca26014610241576100be565b8063615e5237116100a7578063615e52371461014b57806392d0d2321461017e5780639fba03a1146101ee576100be565b80633a04f900146100c35780633f9095b714610101575b600080fd5b6100ff600480360360408110156100d957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135600f0b6102a8565b005b6101346004803603602081101561011757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610447565b60408051600f9290920b8252519081900360200190f35b6100ff6004803603602081101561016157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104f1565b6100ff6004803603604081101561019457600080fd5b8101906020810181356401000000008111156101af57600080fd5b8201836020820111156101c157600080fd5b803590602001918460018302840111640100000000831117156101e357600080fd5b9193509150356104f4565b610134610540565b61022f6004803603604081101561020c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610549565b60408051918252519081900360200190f35b6100ff6004803603604081101561025757600080fd5b508035600f0b9060200135610551565b61026f610555565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f610571565b61026f61058d565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615610327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806105936022913960400191505060405180910390fd5b600081600f0b121580156103465750600054600f90810b810b9082900b125b6103b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420676175676520747970650000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092558151938452600f85900b9084015282810191909152517ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd8779181900360600190a15050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff166104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806105b56021913960400191505060405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902054600f0b90565b50565b505060008054600f81810b600101900b6fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617905550565b600054600f0b90565b600092915050565b5050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60009056fe476175676520616c726561647920657869737473206f6e20636f6e74726f6c6c6572476175676520646f65736e2774206578697374206f6e20636f6e74726f6c6c6572a264697066735822122093e412ca33a6fa791228121bee081fdbb6328e90ebd06ceae77d553470aca9ef64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x685 CODESIZE SUB DUP1 PUSH2 0x685 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD SWAP4 SWAP1 SWAP3 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x60B DUP1 PUSH2 0x7A 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 0xBE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD3078C94 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xDFE05031 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xDFE05031 EQ PUSH2 0x267 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x2A0 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0xD3078C94 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xDB1CA260 EQ PUSH2 0x241 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x615E5237 GT PUSH2 0xA7 JUMPI DUP1 PUSH4 0x615E5237 EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x92D0D232 EQ PUSH2 0x17E JUMPI DUP1 PUSH4 0x9FBA03A1 EQ PUSH2 0x1EE JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x3A04F900 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x3F9095B7 EQ PUSH2 0x101 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xF SIGNEXTEND PUSH2 0x2A8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x447 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xF SWAP3 SWAP1 SWAP3 SIGNEXTEND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x4F1 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 POP SWAP2 POP CALLDATALOAD PUSH2 0x4F4 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x540 JUMP JUMPDEST PUSH2 0x22F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x549 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0xF SIGNEXTEND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x551 JUMP JUMPDEST PUSH2 0x26F PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x26F PUSH2 0x571 JUMP JUMPDEST PUSH2 0x26F PUSH2 0x58D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x327 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x593 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xF SIGNEXTEND SLT ISZERO DUP1 ISZERO PUSH2 0x346 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xF SWAP1 DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 DUP3 SWAP1 SIGNEXTEND SLT JUMPDEST PUSH2 0x3B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676520747970650000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE DUP2 MLOAD SWAP4 DUP5 MSTORE PUSH1 0xF DUP6 SWAP1 SIGNEXTEND SWAP1 DUP5 ADD MSTORE DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFD55B3191F9C9DD92F4F134DD700E7D76F6A0C836A08687023D6D38F03EBD877 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5B5 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xF SIGNEXTEND SWAP1 JUMP JUMPDEST POP JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH1 0xF DUP2 DUP2 SIGNEXTEND PUSH1 0x1 ADD SWAP1 SIGNEXTEND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP2 AND OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xF SIGNEXTEND SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP INVALID SELFBALANCE PUSH2 0x7567 PUSH6 0x20616C726561 PUSH5 0x7920657869 PUSH20 0x7473206F6E20636F6E74726F6C6C657247617567 PUSH6 0x20646F65736E 0x27 PUSH21 0x206578697374206F6E20636F6E74726F6C6C6572A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP4 0xE4 SLT 0xCA CALLER 0xA6 STATICCALL PUSH26 0x1228121BEE081FDBB6328E90EBD06CEAE77D553470ACA9EF6473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "979:1894:68:-:0;;;1468:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1468:158:68;;;;;;;1556:13;:28;;-1:-1:-1;;;;;1556:28:68;;;-1:-1:-1;;;;;;1556:28:68;;;;;;;1594:5;:25;;;;;;;;;;;;;;979:1894;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100be5760003560e01c8063d3078c9411610076578063dfe050311161005b578063dfe0503114610267578063f851a44014610298578063fc0c546a146102a0576100be565b8063d3078c94146101f6578063db1ca26014610241576100be565b8063615e5237116100a7578063615e52371461014b57806392d0d2321461017e5780639fba03a1146101ee576100be565b80633a04f900146100c35780633f9095b714610101575b600080fd5b6100ff600480360360408110156100d957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135600f0b6102a8565b005b6101346004803603602081101561011757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610447565b60408051600f9290920b8252519081900360200190f35b6100ff6004803603602081101561016157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104f1565b6100ff6004803603604081101561019457600080fd5b8101906020810181356401000000008111156101af57600080fd5b8201836020820111156101c157600080fd5b803590602001918460018302840111640100000000831117156101e357600080fd5b9193509150356104f4565b610134610540565b61022f6004803603604081101561020c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610549565b60408051918252519081900360200190f35b6100ff6004803603604081101561025757600080fd5b508035600f0b9060200135610551565b61026f610555565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f610571565b61026f61058d565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff1615610327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806105936022913960400191505060405180910390fd5b600081600f0b121580156103465750600054600f90810b810b9082900b125b6103b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420676175676520747970650000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260016020818152604080842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169093179092558151938452600f85900b9084015282810191909152517ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd8779181900360600190a15050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff166104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806105b56021913960400191505060405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902054600f0b90565b50565b505060008054600f81810b600101900b6fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617905550565b600054600f0b90565b600092915050565b5050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60009056fe476175676520616c726561647920657869737473206f6e20636f6e74726f6c6c6572476175676520646f65736e2774206578697374206f6e20636f6e74726f6c6c6572a264697066735822122093e412ca33a6fa791228121bee081fdbb6328e90ebd06ceae77d553470aca9ef64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD3078C94 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xDFE05031 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xDFE05031 EQ PUSH2 0x267 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x2A0 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0xD3078C94 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0xDB1CA260 EQ PUSH2 0x241 JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x615E5237 GT PUSH2 0xA7 JUMPI DUP1 PUSH4 0x615E5237 EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x92D0D232 EQ PUSH2 0x17E JUMPI DUP1 PUSH4 0x9FBA03A1 EQ PUSH2 0x1EE JUMPI PUSH2 0xBE JUMP JUMPDEST DUP1 PUSH4 0x3A04F900 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x3F9095B7 EQ PUSH2 0x101 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0xF SIGNEXTEND PUSH2 0x2A8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x447 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xF SWAP3 SWAP1 SWAP3 SIGNEXTEND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x4F1 JUMP JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 POP SWAP2 POP CALLDATALOAD PUSH2 0x4F4 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x540 JUMP JUMPDEST PUSH2 0x22F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x549 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD PUSH1 0xF SIGNEXTEND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x551 JUMP JUMPDEST PUSH2 0x26F PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x26F PUSH2 0x571 JUMP JUMPDEST PUSH2 0x26F PUSH2 0x58D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x327 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x593 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xF SIGNEXTEND SLT ISZERO DUP1 ISZERO PUSH2 0x346 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xF SWAP1 DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 DUP3 SWAP1 SIGNEXTEND SLT JUMPDEST PUSH2 0x3B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420676175676520747970650000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE DUP2 MLOAD SWAP4 DUP5 MSTORE PUSH1 0xF DUP6 SWAP1 SIGNEXTEND SWAP1 DUP5 ADD MSTORE DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFD55B3191F9C9DD92F4F134DD700E7D76F6A0C836A08687023D6D38F03EBD877 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5B5 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xF SIGNEXTEND SWAP1 JUMP JUMPDEST POP JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH1 0xF DUP2 DUP2 SIGNEXTEND PUSH1 0x1 ADD SWAP1 SIGNEXTEND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP2 AND OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xF SIGNEXTEND SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP INVALID SELFBALANCE PUSH2 0x7567 PUSH6 0x20616C726561 PUSH5 0x7920657869 PUSH20 0x7473206F6E20636F6E74726F6C6C657247617567 PUSH6 0x20646F65736E 0x27 PUSH21 0x206578697374206F6E20636F6E74726F6C6C6572A2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP4 0xE4 SLT 0xCA CALLER 0xA6 STATICCALL PUSH26 0x1228121BEE081FDBB6328E90EBD06CEAE77D553470ACA9EF6473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "979:1894:68:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1938:317;;;;;;;;;;;;;;;;-1:-1:-1;1938:317:68;;;;;;;;;;;:::i;:::-;;1741:191;;;;;;;;;;;;;;;;-1:-1:-1;1741:191:68;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;2461:117;;;;;;;;;;;;;;;;-1:-1:-1;2461:117:68;;;;:::i;2261:98::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2261:98:68;-1:-1:-1;2261:98:68;;:::i;1632:103::-;;;:::i;2584:154::-;;;;;;;;;;;;;;;;-1:-1:-1;2584:154:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2744:127;;;;;;;;;;;;;;;;-1:-1:-1;2744:127:68;;;;;;;;;:::i;1269:43::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1171:40;;;:::i;2365:90::-;;;:::i;1938:317::-;2027:18;;;;;;;:11;:18;;;;;;;;2026:19;2018:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:1;2102:9;:14;;;;:44;;;;-1:-1:-1;2132:14:68;;;;;;2120:26;;;;;;;2102:44;2094:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2179:18;;;;;;;2200:4;2179:18;;;;;;;;:25;;;;;;;;;;2219:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1938:317;;:::o;1741:191::-;1835:18;;;1809:6;1835:18;;;:11;:18;;;;;;;;1827:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1908:17:68;;;;;;:10;:17;;;;;;;;;1741:191::o;2461:117::-;;:::o;2261:98::-;-1:-1:-1;;2333:14:68;:19;;;;;;2351:1;2333:19;;;;;;;;;;;;-1:-1:-1;2261:98:68:o;1632:103::-;1689:6;1714:14;;;1632:103;:::o;2584:154::-;2665:7;2584:154;;;;:::o;2744:127::-;;;:::o;1269:43::-;;;;;;:::o;1171:40::-;;;;;;:::o;2365:90::-;2414:6;2365:90;:::o" + }, + "methodIdentifiers": { + "add_gauge(address,int128)": "3a04f900", + "add_type(string,uint256)": "92d0d232", + "admin()": "f851a440", + "change_type_weight(int128,uint256)": "db1ca260", + "checkpoint_gauge(address)": "615e5237", + "gauge_relative_weight(address,uint256)": "d3078c94", + "gauge_types(address)": "3f9095b7", + "n_gauge_types()": "9fba03a1", + "token()": "fc0c546a", + "voting_escrow()": "dfe05031" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVotingEscrow\",\"name\":\"votingEscrow\",\"type\":\"address\"},{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"authorizerAdaptor\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int128\",\"name\":\"gauge_type\",\"type\":\"int128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"NewGauge\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"internalType\":\"int128\",\"name\":\"gaugeType\",\"type\":\"int128\"}],\"name\":\"add_gauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"add_type\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"contract IAuthorizerAdaptor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int128\",\"name\":\"\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"change_type_weight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"checkpoint_gauge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"gauge_relative_weight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"gauge_types\",\"outputs\":[{\"internalType\":\"int128\",\"name\":\"\",\"type\":\"int128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"n_gauge_types\",\"outputs\":[{\"internalType\":\"int128\",\"name\":\"\",\"type\":\"int128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voting_escrow\",\"outputs\":[{\"internalType\":\"contract IVotingEscrow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockGaugeController.sol\":\"MockGaugeController\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol\":{\"keccak256\":\"0x570cac7ff41894bc5086836042459d03173f5ee3b736abb89eb1b9ace5b58464\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://513e09014d970f425430015a1ca416c411ff723d2a35b40ff2c1bad1b8cab950\",\"dweb:/ipfs/QmXzCv1pTJkDCfpP21nvupL4SsDjbB7SEkFZSPQim1xwbu\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol\":{\"keccak256\":\"0x3d362ad70a19a0307bc9af2b053c4de85a4e0aacf1eb6b1fb5083873b8a62045\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b141dcb49084bd633c4b95765c57e760deadf484a599e7f8fcbb74a46febe3f\",\"dweb:/ipfs/QmQz9P1bWh8mNQUxz5jdqNqwS226osyCPbQA8DznFspf4f\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"contracts/test/MockGaugeController.sol\":{\"keccak256\":\"0x010e9f39e742c75bedee4f048ae80b70c9b96e8e88f5881330175f803fa7354c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db0e38054c18f9e18a477422f152d49769af5a360166963de1df3220b918b354\",\"dweb:/ipfs/QmVN6bYtS8MGBgt6oMR4sTL8Zsj3dkozmgVy2oHFApwFiQ\"]}},\"version\":1}" + } + }, + "contracts/test/MockLiquidityGauge.sol": { + "MockLiquidityGauge": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "lp_token", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060405161014a38038061014a83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b60ba806100906000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806382c6306614602d575b600080fd5b60336047565b604051603e91906063565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff9190911681526020019056fea26469706673582212204a1c276a26ca7cbb15b251efd4ff2d0c533eab584cb9c9ce3eafc7b788ffec3064736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x14A CODESIZE SUB DUP1 PUSH2 0x14A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 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 0x82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xBA DUP1 PUSH2 0x90 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 0x82C63066 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A SHR 0x27 PUSH11 0x26CA7CBB15B251EFD4FF2D 0xC MSTORE8 RETURNDATACOPY 0xAB PC 0x4C 0xB9 0xC9 0xCE RETURNDATACOPY 0xAF 0xC7 0xB7 DUP9 SELFDESTRUCT 0xEC ADDRESS PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "747:176:69:-:0;;;863:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;899:8;:15;;-1:-1:-1;899:15:69;-1:-1:-1;899:15:69;;;;;;;;;;747:176;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186::o;:::-;747:176:69;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c806382c6306614602d575b600080fd5b60336047565b604051603e91906063565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff9190911681526020019056fea26469706673582212204a1c276a26ca7cbb15b251efd4ff2d0c533eab584cb9c9ce3eafc7b788ffec3064736f6c63430007010033", + "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 0x82C63066 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A SHR 0x27 PUSH11 0x26CA7CBB15B251EFD4FF2D 0xC MSTORE8 RETURNDATACOPY 0xAB PC 0x4C 0xB9 0xC9 0xCE RETURNDATACOPY 0xAF 0xC7 0xB7 DUP9 SELFDESTRUCT 0xEC ADDRESS PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "747:176:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;833:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;125:222:-1:-;525:42;514:54;;;;76:37;;252:2;237:18;;223:124::o" + }, + "methodIdentifiers": { + "lp_token()": "82c63066" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"lp_token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockLiquidityGauge.sol\":\"MockLiquidityGauge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"contracts/test/MockLiquidityGauge.sol\":{\"keccak256\":\"0xce43f8617c732e11ff3e20fe25594b7645e809667b1008827f54f76447b5117c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dc08343b66876f063bcacf71b516e5bab160214eb4c7b8d6ec44cdc1416a1ce1\",\"dweb:/ipfs/QmNx3gMSjRZjuEFhmnXiSxXPnSAeDsDAzT6Umc433kKLH4\"]}},\"version\":1}" + } + }, + "contracts/test/MockLiquidityGaugeFactory.sol": { + "MockLiquidityGaugeFactory": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "gauge", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "GaugeCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGauge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "gauge", + "type": "address" + } + ], + "name": "isGaugeFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5061047c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80639ed9331814610046578063a8ea68751461006f578063ce3cc8bd14610082575b600080fd5b61005961005436600461025e565b6100a2565b6040516100669190610299565b60405180910390f35b61005961007d36600461025e565b6101fb565b61009561009036600461025e565b610226565b60405161006691906102ba565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600160205260408120549091161561010c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610103906102c5565b60405180910390fd5b60008260405161011b90610251565b6101259190610299565b604051809103906000f080158015610141573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff80821660008181526020818152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091559489168084529490915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551939450919290917fbc0aff029cf899fe358381e295caa21dd2e8c1a6607e2b9e6c7ec915db15bd5391a392915050565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600160205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b61014a806102fd83390190565b60006020828403121561026f578081fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610292578182fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c72656164792065786973747300000000000000000000000060408201526060019056fe608060405234801561001057600080fd5b5060405161014a38038061014a83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b60ba806100906000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806382c6306614602d575b600080fd5b60336047565b604051603e91906063565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff9190911681526020019056fea26469706673582212204a1c276a26ca7cbb15b251efd4ff2d0c533eab584cb9c9ce3eafc7b788ffec3064736f6c63430007010033a2646970667358221220c4e6c02ea996b63cf95bf4d5a3c4c23b21b0e9143e2570ebb74608658d3ac0cb64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47C 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 0x9ED93318 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x82 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x25E JUMP JUMPDEST PUSH2 0xA2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x25E JUMP JUMPDEST PUSH2 0x1FB JUMP JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x25E JUMP JUMPDEST PUSH2 0x226 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x2BA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x103 SWAP1 PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH2 0x11B SWAP1 PUSH2 0x251 JUMP JUMPDEST PUSH2 0x125 SWAP2 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x141 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xBC0AFF029CF899FE358381E295CAA21DD2E8C1A6607E2B9E6C7EC915DB15BD53 SWAP2 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x14A DUP1 PUSH2 0x2FD DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x292 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x14A CODESIZE SUB DUP1 PUSH2 0x14A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 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 0x82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xBA DUP1 PUSH2 0x90 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 0x82C63066 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A SHR 0x27 PUSH11 0x26CA7CBB15B251EFD4FF2D 0xC MSTORE8 RETURNDATACOPY 0xAB PC 0x4C 0xB9 0xC9 0xCE RETURNDATACOPY 0xAF 0xC7 0xB7 DUP9 SELFDESTRUCT 0xEC ADDRESS PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC4 0xE6 0xC0 0x2E 0xA9 SWAP7 0xB6 EXTCODECOPY 0xF9 JUMPDEST DELEGATECALL 0xD5 LOG3 0xC4 0xC2 EXTCODESIZE 0x21 0xB0 0xE9 EQ RETURNDATACOPY 0x25 PUSH17 0xEBB74608658D3AC0CB64736F6C63430007 ADD STOP CALLER ", + "sourceMap": "1101:1046:70:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c80639ed9331814610046578063a8ea68751461006f578063ce3cc8bd14610082575b600080fd5b61005961005436600461025e565b6100a2565b6040516100669190610299565b60405180910390f35b61005961007d36600461025e565b6101fb565b61009561009036600461025e565b610226565b60405161006691906102ba565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600160205260408120549091161561010c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610103906102c5565b60405180910390fd5b60008260405161011b90610251565b6101259190610299565b604051809103906000f080158015610141573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff80821660008181526020818152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091559489168084529490915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551939450919290917fbc0aff029cf899fe358381e295caa21dd2e8c1a6607e2b9e6c7ec915db15bd5391a392915050565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600160205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b61014a806102fd83390190565b60006020828403121561026f578081fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610292578182fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b60208082526014908201527f476175676520616c72656164792065786973747300000000000000000000000060408201526060019056fe608060405234801561001057600080fd5b5060405161014a38038061014a83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b60ba806100906000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806382c6306614602d575b600080fd5b60336047565b604051603e91906063565b60405180910390f35b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff9190911681526020019056fea26469706673582212204a1c276a26ca7cbb15b251efd4ff2d0c533eab584cb9c9ce3eafc7b788ffec3064736f6c63430007010033a2646970667358221220c4e6c02ea996b63cf95bf4d5a3c4c23b21b0e9143e2570ebb74608658d3ac0cb64736f6c63430007010033", + "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 0x9ED93318 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xA8EA6875 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xCE3CC8BD EQ PUSH2 0x82 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x25E JUMP JUMPDEST PUSH2 0xA2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x25E JUMP JUMPDEST PUSH2 0x1FB JUMP JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x25E JUMP JUMPDEST PUSH2 0x226 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x2BA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x103 SWAP1 PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x40 MLOAD PUSH2 0x11B SWAP1 PUSH2 0x251 JUMP JUMPDEST PUSH2 0x125 SWAP2 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x141 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xBC0AFF029CF899FE358381E295CAA21DD2E8C1A6607E2B9E6C7EC915DB15BD53 SWAP2 LOG3 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x14A DUP1 PUSH2 0x2FD DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x292 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x14 SWAP1 DUP3 ADD MSTORE PUSH32 0x476175676520616C726561647920657869737473000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x14A CODESIZE SUB DUP1 PUSH2 0x14A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 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 0x82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x65 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7B JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xBA DUP1 PUSH2 0x90 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 0x82C63066 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A SHR 0x27 PUSH11 0x26CA7CBB15B251EFD4FF2D 0xC MSTORE8 RETURNDATACOPY 0xAB PC 0x4C 0xB9 0xC9 0xCE RETURNDATACOPY 0xAF 0xC7 0xB7 DUP9 SELFDESTRUCT 0xEC ADDRESS PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC4 0xE6 0xC0 0x2E 0xA9 SWAP7 0xB6 EXTCODECOPY 0xF9 JUMPDEST DELEGATECALL 0xD5 LOG3 0xC4 0xC2 EXTCODESIZE 0x21 0xB0 0xE9 EQ RETURNDATACOPY 0x25 PUSH17 0xEBB74608658D3AC0CB64736F6C63430007 ADD STOP CALLER ", + "sourceMap": "1101:1046:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1794:351;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1434:133;;;;;;:::i;:::-;;:::i;1657:131::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1794:351::-;1878:30;:16;;;1851:7;1878:16;;;:10;:16;;;;;;1851:7;;1878:16;:30;1870:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1944:13;1991:4;1968:28;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2008:26:70;;;;:19;:26;;;;;;;;;;;:33;;;;2037:4;2008:33;;;;;;2051:16;;;;;;;;;;;;;:24;;;;;;;;2090:25;1944:53;;-1:-1:-1;2051:16:70;;2008:26;;2090:25;;;2133:5;1794:351;-1:-1:-1;;1794:351:70:o;1434:133::-;1543:16;;;;1493:15;1543:16;;;:10;:16;;;;;;;;1434:133::o;1657:131::-;1755:26;;1732:4;1755:26;;;;;;;;;;;;;;1657:131::o;-1:-1:-1:-;;;;;;;;:::o;142:241::-;;246:2;234:9;225:7;221:23;217:32;214:2;;;-1:-1;;252:12;214:2;85:6;72:20;2708:42;3162:5;2697:54;3137:5;3134:35;3124:2;;-1:-1;;3173:12;3124:2;304:63;208:175;-1:-1;;;208:175::o;1129:222::-;2708:42;2697:54;;;;461:37;;1256:2;1241:18;;1227:124::o;1358:210::-;2609:13;;2602:21;575:34;;1479:2;1464:18;;1450:118::o;1850:416::-;2050:2;2064:47;;;1025:2;2035:18;;;2377:19;1061:22;2417:14;;;1041:43;1103:12;;;2021:245::o" + }, + "methodIdentifiers": { + "create(address)": "9ed93318", + "getPoolGauge(address)": "a8ea6875", + "isGaugeFromFactory(address)": "ce3cc8bd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"GaugeCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolGauge\",\"outputs\":[{\"internalType\":\"contract ILiquidityGauge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gauge\",\"type\":\"address\"}],\"name\":\"isGaugeFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPoolGauge(address)\":{\"notice\":\"Returns the address of the gauge belonging to `pool`.\"},\"isGaugeFromFactory(address)\":{\"notice\":\"Returns true if `gauge` was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockLiquidityGaugeFactory.sol\":\"MockLiquidityGaugeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol\":{\"keccak256\":\"0xe73d2e5fcc18b9f53cb6795d83a160c34d1219ce5883a7a276cd8d07d5598a69\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acd6f4d728b50fb1ede61a5aed2c86651a810f739180fe10c8ab6f3e11726015\",\"dweb:/ipfs/QmZSQgJUG7wa7NgoH9ZsaFBX188FFSBg3Z4uyj1dbAtGTZ\"]},\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol\":{\"keccak256\":\"0x496c5997689ccb7666e020cfabcf3d46b099818f958a7b78ca5f385fc2117f36\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e751bdd6c7b13f5cc68606ef9321291470d7c064ac15b74fdcce75a5b519a039\",\"dweb:/ipfs/QmQ7NpZQQKovhNjeeZ2aYt5mzoxbEgYFJC633PP9BdtHb7\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol\":{\"keccak256\":\"0x0ef386c5d211024ce07fd77245128db56fdfd2aae7e5e4232b72fb0cecb6be03\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0f09b20288f085f7a2ce289a8b1676d2d873e76a25929fbd9328e2d722225b5\",\"dweb:/ipfs/QmbVW5u6dSXsTBb66tKHS9QN5RPonEcpNzAjJ1nBe8UVRi\"]},\"contracts/test/MockLiquidityGauge.sol\":{\"keccak256\":\"0xce43f8617c732e11ff3e20fe25594b7645e809667b1008827f54f76447b5117c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://dc08343b66876f063bcacf71b516e5bab160214eb4c7b8d6ec44cdc1416a1ce1\",\"dweb:/ipfs/QmNx3gMSjRZjuEFhmnXiSxXPnSAeDsDAzT6Umc433kKLH4\"]},\"contracts/test/MockLiquidityGaugeFactory.sol\":{\"keccak256\":\"0xf5ea17f204a2c9d66eda6e04a174ac42669934cbc0767dd80beeea5acccb1dd9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ca0316f2ffeec298f1c5e2733a911bbfde86b60f1aa9b192c8bad6757942b365\",\"dweb:/ipfs/QmYwPbQBNkYUG96J8CfPbhaz34hKpGhwE2ghiXxMpErHNt\"]}},\"version\":1}" + } + }, + "contracts/test/MockRewardTokenDistributor.sol": { + "MockRewardTokenDistributor": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "add_reward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "claim_rewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "deposit_reward_token", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "reward_data", + "outputs": [ + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + }, + { + "internalType": "uint256", + "name": "period_finish", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "last_update", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "integral", + "type": "uint256" + } + ], + "internalType": "struct IRewardTokenDistributor.Reward", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "reward_tokens", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "name": "set_reward_distributor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506106ff806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806384e9bd7e1161005057806384e9bd7e146100d557806393f7aa67146100e8578063e8de0d4d146100fb57610072565b8063058a3a241461007757806348e9c65e1461008c57806354c49fe9146100b5575b600080fd5b61008a6100853660046104e8565b61010e565b005b61009f61009a3660046104a5565b610164565b6040516100ac9190610649565b60405180910390f35b6100c86100c336600461054b565b6101e0565b6040516100ac9190610594565b61008a6100e33660046104a5565b61020d565b61008a6100f6366004610520565b610210565b61008a6101093660046104e8565b610329565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260096020526040902060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b61016c610443565b5073ffffffffffffffffffffffffffffffffffffffff908116600090815260096020908152604091829020825160c08101845281548516815260018201549094169184019190915260028101549183019190915260038101546060830152600481015460808301526005015460a082015290565b6000600182600881106101ef57fe5b015473ffffffffffffffffffffffffffffffffffffffff1692915050565b50565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526009602052604090206001015416331461027c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610273906105ec565b60405180910390fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906102d290339030908690600401610563565b602060405180830381600087803b1580156102ec57600080fd5b505af1158015610300573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032491906104c8565b505050565b8160016000546008811061033957fe5b01805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556040805160c0810182528584168082528585166020808401918252600084860181815260608601828152426080880190815260a08801848152968452600990945296822095518654908a1690891617865592516001868101805492909a16919098161790975590516002840155925160038301559151600482015590516005909101558154019081905560081161043f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610273906105b5565b5050565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b6000602082840312156104b6578081fd5b81356104c1816106a7565b9392505050565b6000602082840312156104d9578081fd5b815180151581146104c1578182fd5b600080604083850312156104fa578081fd5b8235610505816106a7565b91506020830135610515816106a7565b809150509250929050565b60008060408385031215610532578182fd5b823561053d816106a7565b946020939093013593505050565b60006020828403121561055c578081fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082526016908201527f546f6f206d616e792072657761726420746f6b656e7300000000000000000000604082015260600190565b60208082526023908201527f4f6e6c792063616c6c61626c652062792072657761726420646973747269627560408201527f746f720000000000000000000000000000000000000000000000000000000000606082015260800190565b600060c08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461020d57600080fdfea26469706673582212206f7082f7abfbc250f4dc6fa8dbea50f535f2688c1b9891be6b542cecde87fb0e64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6FF 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 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x84E9BD7E GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x84E9BD7E EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x93F7AA67 EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xE8DE0D4D EQ PUSH2 0xFB JUMPI PUSH2 0x72 JUMP JUMPDEST DUP1 PUSH4 0x58A3A24 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x48E9C65E EQ PUSH2 0x8C JUMPI DUP1 PUSH4 0x54C49FE9 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x85 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E8 JUMP JUMPDEST PUSH2 0x10E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x9A CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x164 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x649 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x54B JUMP JUMPDEST PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x594 JUMP JUMPDEST PUSH2 0x8A PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x20D JUMP JUMPDEST PUSH2 0x8A PUSH2 0xF6 CALLDATASIZE PUSH1 0x4 PUSH2 0x520 JUMP JUMPDEST PUSH2 0x210 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x109 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E8 JUMP JUMPDEST PUSH2 0x329 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x16C PUSH2 0x443 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP6 AND DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP1 SWAP5 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x1EF JUMPI INVALID JUMPDEST ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND CALLER EQ PUSH2 0x27C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x273 SWAP1 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x2D2 SWAP1 CALLER SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x563 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x300 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x324 SWAP2 SWAP1 PUSH2 0x4C8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x0 SLOAD PUSH1 0x8 DUP2 LT PUSH2 0x339 JUMPI INVALID JUMPDEST ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE DUP6 DUP5 AND DUP1 DUP3 MSTORE DUP6 DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE PUSH1 0x0 DUP5 DUP7 ADD DUP2 DUP2 MSTORE PUSH1 0x60 DUP7 ADD DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x80 DUP9 ADD SWAP1 DUP2 MSTORE PUSH1 0xA0 DUP9 ADD DUP5 DUP2 MSTORE SWAP7 DUP5 MSTORE PUSH1 0x9 SWAP1 SWAP5 MSTORE SWAP7 DUP3 KECCAK256 SWAP6 MLOAD DUP7 SLOAD SWAP1 DUP11 AND SWAP1 DUP10 AND OR DUP7 SSTORE SWAP3 MLOAD PUSH1 0x1 DUP7 DUP2 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP11 AND SWAP2 SWAP1 SWAP9 AND OR SWAP1 SWAP8 SSTORE SWAP1 MLOAD PUSH1 0x2 DUP5 ADD SSTORE SWAP3 MLOAD PUSH1 0x3 DUP4 ADD SSTORE SWAP2 MLOAD PUSH1 0x4 DUP3 ADD SSTORE SWAP1 MLOAD PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE DUP2 SLOAD ADD SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x8 GT PUSH2 0x43F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x273 SWAP1 PUSH2 0x5B5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4C1 DUP2 PUSH2 0x6A7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4C1 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4FA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x505 DUP2 PUSH2 0x6A7 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x515 DUP2 PUSH2 0x6A7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x532 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x53D DUP2 PUSH2 0x6A7 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55C JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206D616E792072657761726420746F6B656E7300000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C792063616C6C61626C6520627920726577617264206469737472696275 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746F720000000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x20D JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x7082F7ABFBC250F4DC6FA8DBEA50F535 CALLCODE PUSH9 0x8C1B9891BE6B542CEC 0xDE DUP8 0xFB 0xE PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1121:1540:71:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100725760003560e01c806384e9bd7e1161005057806384e9bd7e146100d557806393f7aa67146100e8578063e8de0d4d146100fb57610072565b8063058a3a241461007757806348e9c65e1461008c57806354c49fe9146100b5575b600080fd5b61008a6100853660046104e8565b61010e565b005b61009f61009a3660046104a5565b610164565b6040516100ac9190610649565b60405180910390f35b6100c86100c336600461054b565b6101e0565b6040516100ac9190610594565b61008a6100e33660046104a5565b61020d565b61008a6100f6366004610520565b610210565b61008a6101093660046104e8565b610329565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260096020526040902060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b61016c610443565b5073ffffffffffffffffffffffffffffffffffffffff908116600090815260096020908152604091829020825160c08101845281548516815260018201549094169184019190915260028101549183019190915260038101546060830152600481015460808301526005015460a082015290565b6000600182600881106101ef57fe5b015473ffffffffffffffffffffffffffffffffffffffff1692915050565b50565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526009602052604090206001015416331461027c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610273906105ec565b60405180910390fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906102d290339030908690600401610563565b602060405180830381600087803b1580156102ec57600080fd5b505af1158015610300573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032491906104c8565b505050565b8160016000546008811061033957fe5b01805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556040805160c0810182528584168082528585166020808401918252600084860181815260608601828152426080880190815260a08801848152968452600990945296822095518654908a1690891617865592516001868101805492909a16919098161790975590516002840155925160038301559151600482015590516005909101558154019081905560081161043f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610273906105b5565b5050565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b6000602082840312156104b6578081fd5b81356104c1816106a7565b9392505050565b6000602082840312156104d9578081fd5b815180151581146104c1578182fd5b600080604083850312156104fa578081fd5b8235610505816106a7565b91506020830135610515816106a7565b809150509250929050565b60008060408385031215610532578182fd5b823561053d816106a7565b946020939093013593505050565b60006020828403121561055c578081fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082526016908201527f546f6f206d616e792072657761726420746f6b656e7300000000000000000000604082015260600190565b60208082526023908201527f4f6e6c792063616c6c61626c652062792072657761726420646973747269627560408201527f746f720000000000000000000000000000000000000000000000000000000000606082015260800190565b600060c08201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461020d57600080fdfea26469706673582212206f7082f7abfbc250f4dc6fa8dbea50f535f2688c1b9891be6b542cecde87fb0e64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x72 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x84E9BD7E GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x84E9BD7E EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x93F7AA67 EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xE8DE0D4D EQ PUSH2 0xFB JUMPI PUSH2 0x72 JUMP JUMPDEST DUP1 PUSH4 0x58A3A24 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0x48E9C65E EQ PUSH2 0x8C JUMPI DUP1 PUSH4 0x54C49FE9 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0x85 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E8 JUMP JUMPDEST PUSH2 0x10E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x9A CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x164 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x649 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x54B JUMP JUMPDEST PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAC SWAP2 SWAP1 PUSH2 0x594 JUMP JUMPDEST PUSH2 0x8A PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0x20D JUMP JUMPDEST PUSH2 0x8A PUSH2 0xF6 CALLDATASIZE PUSH1 0x4 PUSH2 0x520 JUMP JUMPDEST PUSH2 0x210 JUMP JUMPDEST PUSH2 0x8A PUSH2 0x109 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E8 JUMP JUMPDEST PUSH2 0x329 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x16C PUSH2 0x443 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP6 AND DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP1 SWAP5 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0x8 DUP2 LT PUSH2 0x1EF JUMPI INVALID JUMPDEST ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND CALLER EQ PUSH2 0x27C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x273 SWAP1 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH2 0x2D2 SWAP1 CALLER SWAP1 ADDRESS SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x563 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x300 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x324 SWAP2 SWAP1 PUSH2 0x4C8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x0 SLOAD PUSH1 0x8 DUP2 LT PUSH2 0x339 JUMPI INVALID JUMPDEST ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD DUP3 MSTORE DUP6 DUP5 AND DUP1 DUP3 MSTORE DUP6 DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP3 MSTORE PUSH1 0x0 DUP5 DUP7 ADD DUP2 DUP2 MSTORE PUSH1 0x60 DUP7 ADD DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x80 DUP9 ADD SWAP1 DUP2 MSTORE PUSH1 0xA0 DUP9 ADD DUP5 DUP2 MSTORE SWAP7 DUP5 MSTORE PUSH1 0x9 SWAP1 SWAP5 MSTORE SWAP7 DUP3 KECCAK256 SWAP6 MLOAD DUP7 SLOAD SWAP1 DUP11 AND SWAP1 DUP10 AND OR DUP7 SSTORE SWAP3 MLOAD PUSH1 0x1 DUP7 DUP2 ADD DUP1 SLOAD SWAP3 SWAP1 SWAP11 AND SWAP2 SWAP1 SWAP9 AND OR SWAP1 SWAP8 SSTORE SWAP1 MLOAD PUSH1 0x2 DUP5 ADD SSTORE SWAP3 MLOAD PUSH1 0x3 DUP4 ADD SSTORE SWAP2 MLOAD PUSH1 0x4 DUP3 ADD SSTORE SWAP1 MLOAD PUSH1 0x5 SWAP1 SWAP2 ADD SSTORE DUP2 SLOAD ADD SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x8 GT PUSH2 0x43F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x273 SWAP1 PUSH2 0x5B5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4C1 DUP2 PUSH2 0x6A7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4C1 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4FA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x505 DUP2 PUSH2 0x6A7 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x515 DUP2 PUSH2 0x6A7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x532 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x53D DUP2 PUSH2 0x6A7 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x55C JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x16 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6F206D616E792072657761726420746F6B656E7300000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C792063616C6C61626C6520627920726577617264206469737472696275 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x746F720000000000000000000000000000000000000000000000000000000000 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x20D JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x7082F7ABFBC250F4DC6FA8DBEA50F535 CALLCODE PUSH9 0x8C1B9891BE6B542CEC 0xDE DUP8 0xFB 0xE PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1121:1540:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2046:158;;;;;;:::i;:::-;;:::i;:::-;;1441:124;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1313:122;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2540:119::-;;;;;;:::i;:::-;;:::i;2210:324::-;;;;;;:::i;:::-;;:::i;1571:469::-;;;;;;:::i;:::-;;:::i;2046:158::-;2147:24;;;;;;;;:11;:24;;;;;:36;;:50;;;;;;;;;;;2046:158::o;1441:124::-;1508:13;;:::i;:::-;-1:-1:-1;1540:18:71;;;;;;;;:11;:18;;;;;;;;;1533:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1441:124::o;1313:122::-;1383:6;1408:13;1422:5;1408:20;;;;;;;;;;;;1313:122;-1:-1:-1;;1313:122:71:o;2540:119::-;;:::o;2210:324::-;2312:50;:24;;;;;;;:11;:24;;;;;:36;;;;2352:10;2312:50;2304:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;2412:59;;;;;:24;;;;;;:59;;2437:10;;2457:4;;2464:6;;2412:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2210:324;;:::o;1571:469::-;1690:11;1660:13;1674:12;;1660:27;;;;;;;;:41;;;;;;;;;;;;;;1738:206;;;;;;;;;;;;;;;;;;;;;;;;1660:27;1738:206;;;;;;;;;;;;1893:15;1738:206;;;;;;;;;;;;1711:24;;;:11;:24;;;;;;:233;;;;;;;;;;;;;;;1660:41;1711:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1955:17;;;;;;;2005:1;-1:-1:-1;1982:51:71;;;;;;;;;;;;:::i;:::-;1571:469;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;581:241::-;;685:2;673:9;664:7;660:23;656:32;653:2;;;-1:-1;;691:12;653:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;743:63;647:175;-1:-1;;;647:175::o;829:257::-;;941:2;929:9;920:7;916:23;912:32;909:2;;;-1:-1;;947:12;909:2;223:6;217:13;8733:5;7515:13;7508:21;8711:5;8708:32;8698:2;;-1:-1;;8744:12;1371:396;;;1507:2;1495:9;1486:7;1482:23;1478:32;1475:2;;;-1:-1;;1513:12;1475:2;372:6;359:20;384:48;426:5;384:48;:::i;:::-;1565:78;-1:-1;1680:2;1719:22;;72:20;97:33;72:20;97:33;:::i;:::-;1688:63;;;;1469:298;;;;;:::o;1774:396::-;;;1910:2;1898:9;1889:7;1885:23;1881:32;1878:2;;;-1:-1;;1916:12;1878:2;372:6;359:20;384:48;426:5;384:48;:::i;:::-;1968:78;2083:2;2122:22;;;;511:20;;-1:-1;;;1872:298::o;2177:241::-;;2281:2;2269:9;2260:7;2256:23;2252:32;2249:2;;;-1:-1;;2287:12;2249:2;-1:-1;511:20;;2243:175;-1:-1;2243:175::o;5285:460::-;7727:42;7716:54;;;2504:58;;7716:54;;;;5648:2;5633:18;;2635:37;5731:2;5716:18;;5116:37;;;;5476:2;5461:18;;5447:298::o;5752:252::-;7727:42;7716:54;;;;2880:65;;5894:2;5879:18;;5865:139::o;6011:416::-;6211:2;6225:47;;;3345:2;6196:18;;;7283:19;3381:24;7323:14;;;3361:45;3425:12;;;6182:245::o;6434:416::-;6634:2;6648:47;;;3676:2;6619:18;;;7283:19;3712:34;7323:14;;;3692:55;3781:5;3767:12;;;3760:27;3806:12;;;6605:245::o;6857:315::-;;7030:3;7019:9;7015:19;7007:27;;7727:42;;4129:16;4123:23;7716:54;2887:3;2880:65;7727:42;4316:4;4309:5;4305:16;4299:23;7716:54;4316:4;4380:3;4376:14;2635:37;;4479:4;4472:5;4468:16;4462:23;4479:4;4543:3;4539:14;5116:37;4633:4;4626:5;4622:16;4616:23;4633:4;4697:3;4693:14;5116:37;4794:4;4787:5;4783:16;4777:23;4794:4;4858:3;4854:14;5116:37;4952:4;4945:5;4941:16;4935:23;4952:4;5016:3;5012:14;5116:37;7001:171;;;;:::o;8528:117::-;7727:42;8615:5;7716:54;8590:5;8587:35;8577:2;;8636:1;;8626:12" + }, + "methodIdentifiers": { + "add_reward(address,address)": "e8de0d4d", + "claim_rewards(address)": "84e9bd7e", + "deposit_reward_token(address,uint256)": "93f7aa67", + "reward_data(address)": "48e9c65e", + "reward_tokens(uint256)": "54c49fe9", + "set_reward_distributor(address,address)": "058a3a24" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"add_reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"claim_rewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit_reward_token\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"reward_data\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"period_finish\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last_update\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"integral\",\"type\":\"uint256\"}],\"internalType\":\"struct IRewardTokenDistributor.Reward\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"reward_tokens\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"}],\"name\":\"set_reward_distributor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is designed to mock LiquidityGaugeV5's interface for distributing external tokens.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockRewardTokenDistributor.sol\":\"MockRewardTokenDistributor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol\":{\"keccak256\":\"0x0c992c65f6cf48ce430d14518b1c402faf11f50fc3683321ea7dfb808eb3f3a8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b9d182e07a81d3444297d6a751c2a68ddf05b4f1b16c962ef0fe5389f1674309\",\"dweb:/ipfs/QmQYKQ1YecKzkGGrVxjexGEoxU8BPojfJCsNKp5VgYRFtA\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"contracts/test/MockRewardTokenDistributor.sol\":{\"keccak256\":\"0x04ddbeda31667aab08732e0284cb563310f257cc5d7b27665d0c5c77ac6453ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3ef9af54dc73b618d53ada6ea9091ff26350ba1754b54db665378b66cf32ff5c\",\"dweb:/ipfs/QmehruBV5Ye7We4XR9cDHd9udoP9gVrq89jruDM7cKBmwo\"]}},\"version\":1}" + } + }, + "contracts/test/TestAccessControl.sol": { + "TestAccessControl": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DEFAULT_ADMIN_ROLE()": "a217fddf", + "getRoleAdmin(bytes32)": "248a9ca3", + "getRoleMember(bytes32,uint256)": "9010d07c", + "getRoleMemberCount(bytes32)": "ca15c873", + "grantRole(bytes32,address)": "2f2ff15d", + "hasRole(bytes32,address)": "91d14854", + "renounceRole(bytes32,address)": "36568abe", + "revokeRole(bytes32,address)": "d547741f" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module that allows children to implement role-based access control mechanisms. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ``` bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ``` function foo() public { require(hasRole(MY_ROLE, msg.sender)); ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestAccessControl.sol\":\"TestAccessControl\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol\":{\"keccak256\":\"0xd0124aa262584bcdc163089547074252ace79201c02de2573fc8154cdc024b25\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://333957f2afd70aef1757e5e84a8ed6e5048eb8233448a3c67e7111ae9f01b6bc\",\"dweb:/ipfs/QmSQcuZH5rkS8D1PGt6tJZpkPM8onWPwNe24iEVjZWidt4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa644f3f9066d6a300bd7c1c214ce55c1569bb5ec54815d49c5c7a1a63cd03df3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81ee2467e6a0f340d64738d7a03a407e88caa5ee31cb3c8bd6990985f1891acc\",\"dweb:/ipfs/QmP7s6CSdDLGFjNxi9Q8GEVJFiD6QkeseGD857bPE7E7Ki\"]},\"contracts/test/TestAccessControl.sol\":{\"keccak256\":\"0xd7e1e3bdde3a149dfc57de01e4d2fef1a3624af436ae95dfe444d8bfb25772b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1f209648a170f1cb287cc462a78a1733e027c14026bb052a4b8eb372c97d665\",\"dweb:/ipfs/QmYCg7YsmwzAzxLChiek7kFysvqNvSTi6wCeGvwGiYCksT\"]}},\"version\":1}" + } + }, + "contracts/test/TestBalancerToken.sol": { + "TestBalancerToken": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "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": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Snapshot", + "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": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SNAPSHOT_ROLE", + "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": "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": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "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": "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": [ + { + "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": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "snapshot", + "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": "recipient", + "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" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6101006040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960e0523480156200003657600080fd5b5060405162001b0838038062001b08833981810160405260608110156200005c57600080fd5b8151602083018051604051929492938301929190846401000000008211156200008457600080fd5b9083019060208201858111156200009a57600080fd5b8251640100000000811182820188101715620000b557600080fd5b82525081516020918201929091019080838360005b83811015620000e4578181015183820152602001620000ca565b50505050905090810190601f168015620001125780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013657600080fd5b9083019060208201858111156200014c57600080fd5b82516401000000008111828201881017156200016757600080fd5b82525081516020918201929091019080838360005b83811015620001965781810151838201526020016200017c565b50505050905090810190601f168015620001c45780820380516001836020036101000a031916815260200191505b506040525050508180604051806040016040528060018152602001603160f81b8152508484816004908051906020019062000201929190620003f7565b50805162000217906005906020840190620003f7565b50506006805460ff1916601290811790915583516020948501206080528251929093019190912060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c052620002729150620002e0565b6200027f600084620002f6565b620002ab7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a684620002f6565b620002d77f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f84620002f6565b50505062000493565b6006805460ff191660ff92909216919091179055565b62000302828262000306565b5050565b6000828152602081815260409091206200032b91839062000df26200036d821b17901c565b15620003025760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60006200037b8383620003d6565b620003cc57508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b03861690811790915585549082528286019093526040902091909155620003d0565b5060005b92915050565b6001600160a01b031660009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200043a57805160ff19168380011785556200046a565b828001600101855582156200046a579182015b828111156200046a5782518255916020019190600101906200044d565b50620004789291506200047c565b5090565b5b808211156200047857600081556001016200047d565b60805160a05160c05160e05161163f620004c960003980610bd352508061102c52508061106e52508061104d525061163f6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806379cc6790116100f9578063a457c2d711610097578063d505accf11610071578063d505accf14610560578063d5391393146105b1578063d547741f146105b9578063dd62ed3e146105e5576101c4565b8063a457c2d7146104eb578063a9059cbb14610517578063ca15c87314610543576101c4565b806391d14854116100d357806391d14854146104a757806395d89b41146104d35780639711715a146104db578063a217fddf146104e3576101c4565b806379cc6790146104165780637ecebe00146104425780639010d07c14610468576101c4565b80633644e5151161016657806340c10f191161014057806340c10f191461039f57806342966c68146103cb5780637028e2cd146103e857806370a08231146103f0576101c4565b80633644e5151461033f57806336568abe146103475780633950935114610373576101c4565b806323b872dd116101a257806323b872dd146102a0578063248a9ca3146102d65780632f2ff15d146102f3578063313ce56714610321576101c4565b806306fdde03146101c9578063095ea7b31461024657806318160ddd14610286575b600080fd5b6101d1610613565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102726004803603604081101561025c57600080fd5b506001600160a01b0381351690602001356106c7565b604080519115158252519081900360200190f35b61028e6106de565b60408051918252519081900360200190f35b610272600480360360608110156102b657600080fd5b506001600160a01b038135811691602081013590911690604001356106e4565b61028e600480360360208110156102ec57600080fd5b5035610738565b61031f6004803603604081101561030957600080fd5b50803590602001356001600160a01b031661074d565b005b6103296107cc565b6040805160ff9092168252519081900360200190f35b61028e6107d5565b61031f6004803603604081101561035d57600080fd5b50803590602001356001600160a01b03166107e4565b6102726004803603604081101561038957600080fd5b506001600160a01b03813516906020013561084f565b61031f600480360360408110156103b557600080fd5b506001600160a01b038135169060200135610885565b61031f600480360360208110156103e157600080fd5b5035610924565b61028e610931565b61028e6004803603602081101561040657600080fd5b50356001600160a01b0316610955565b61031f6004803603604081101561042c57600080fd5b506001600160a01b038135169060200135610970565b61028e6004803603602081101561045857600080fd5b50356001600160a01b03166109a6565b61048b6004803603604081101561047e57600080fd5b50803590602001356109c1565b604080516001600160a01b039092168252519081900360200190f35b610272600480360360408110156104bd57600080fd5b50803590602001356001600160a01b03166109e0565b6101d16109f8565b61031f610a77565b61028e610b42565b6102726004803603604081101561050157600080fd5b506001600160a01b038135169060200135610b47565b6102726004803603604081101561052d57600080fd5b506001600160a01b038135169060200135610b80565b61028e6004803603602081101561055957600080fd5b5035610b8d565b61031f600480360360e081101561057657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610ba4565b61028e610d32565b61031f600480360360408110156105cf57600080fd5b50803590602001356001600160a01b0316610d56565b61028e600480360360408110156105fb57600080fd5b506001600160a01b0381358116916020013516610dc7565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bd5780601f10610692576101008083540402835291602001916106bd565b820191906000526020600020905b8154815290600101906020018083116106a057829003601f168201915b5050505050905090565b60006106d4338484610e6d565b5060015b92915050565b60035490565b60006106f1848484610ecf565b6001600160a01b03841660009081526002602090815260408083203380855292529091205461072e918691610729908661019e610fb9565b610e6d565b5060019392505050565b60009081526020819052604090206002015490565b60008281526020819052604090206002015461076990336109e0565b6107be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061157c602f913960400191505060405180910390fd5b6107c88282610fcf565b5050565b60065460ff1690565b60006107df611028565b905090565b6001600160a01b0381163314610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806115db602f913960400191505060405180910390fd5b6107c882826110e6565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106d4918590610729908661113f565b6108af7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336109e0565b61091a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f4d494e54455200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6107c88282611151565b61092e33826111e8565b50565b7f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f81565b6001600160a01b031660009081526001602052604090205490565b600061098a826101a16109838633610dc7565b9190610fb9565b9050610997833383610e6d565b6109a183836111e8565b505050565b6001600160a01b031660009081526007602052604090205490565b60008281526020819052604081206109d9908361129f565b9392505050565b60008281526020819052604081206109d990836112bb565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bd5780601f10610692576101008083540402835291602001916106bd565b610aa17f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f336109e0565b610b0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f545f534e415053484f545445520000000000000000000000000000000000604482015290519081900360640190fd5b604080516000815290517f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb679181900360200190a1565b600081565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106d4918590610729908661019f610fb9565b60006106d4338484610ecf565b60008181526020819052604081206106d8906112dc565b610bb28442111560d16112e0565b6001600160a01b0380881660008181526007602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e09094019052825192019190912090610c3e826112ee565b9050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610c9c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150610cfc90506001600160a01b03821615801590610cf457508b6001600160a01b0316826001600160a01b0316145b6101f86112e0565b6001600160a01b038b166000908152600760205260409020600185019055610d258b8b8b610e6d565b5050505050505050505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b600082815260208190526040902060020154610d7290336109e0565b610845576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806115ab6030913960400191505060405180910390fd5b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000610dfe83836112bb565b610e6557508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038616908117909155855490825282860190935260409020919091556106d8565b5060006106d8565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b610ee66001600160a01b03841615156101986112e0565b610efd6001600160a01b03831615156101996112e0565b610f088383836109a1565b6001600160a01b038316600090815260016020526040902054610f2e90826101a0610fb9565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610f5d908261113f565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000610fc884841115836112e0565b5050900390565b6000828152602081905260409020610fe79082610df2565b156107c85760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611095611355565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b60008281526020819052604090206110fe9082611359565b156107c85760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b60008282016109d984821015836112e0565b61115d600083836109a1565b60035461116a908261113f565b6003556001600160a01b038216600090815260016020526040902054611190908261113f565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6111ff6001600160a01b038316151561019b6112e0565b61120b826000836109a1565b6001600160a01b03821660009081526001602052604090205461123190826101b2610fb9565b6001600160a01b03831660009081526001602052604090205560035461125790826114d3565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b81546000906112b190831060646112e0565b6109d983836114e1565b6001600160a01b031660009081526001919091016020526040902054151590565b5490565b816107c8576107c88161150e565b60006112f8611028565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b4690565b6001600160a01b038116600090815260018301602052604081205480156114c95783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301910180821461143b5760008660000182815481106113ba57fe5b60009182526020909120015487546001600160a01b03909116915081908890859081106113e357fe5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0394851617905592909116815260018881019092526040902090830190555b855486908061144657fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559092019092556001600160a01b03871682526001888101909152604082209190915593506106d892505050565b60009150506106d8565b60006109d983836001610fb9565b60008260000182815481106114f257fe5b6000918252602090912001546001600160a01b03169392505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122053d379281d6492973346c0ab6c3a49ef57ffba220708de36ae2f9ef2dc8048be64736f6c63430007010033", + "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0xE0 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1B08 CODESIZE SUB DUP1 PUSH3 0x1B08 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xE4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xCA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x112 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x196 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x17C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1C4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP DUP2 DUP1 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 DUP5 DUP5 DUP2 PUSH1 0x4 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x201 SWAP3 SWAP2 SWAP1 PUSH3 0x3F7 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x217 SWAP1 PUSH1 0x5 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x3F7 JUMP JUMPDEST POP POP PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP4 MLOAD PUSH1 0x20 SWAP5 DUP6 ADD KECCAK256 PUSH1 0x80 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH3 0x272 SWAP2 POP PUSH3 0x2E0 JUMP JUMPDEST PUSH3 0x27F PUSH1 0x0 DUP5 PUSH3 0x2F6 JUMP JUMPDEST PUSH3 0x2AB PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP5 PUSH3 0x2F6 JUMP JUMPDEST PUSH3 0x2D7 PUSH32 0x5FDBD35E8DA83EE755D5E62A539E5ED7F47126ABEDE0B8B10F9EA43DC6EED07F DUP5 PUSH3 0x2F6 JUMP JUMPDEST POP POP POP PUSH3 0x493 JUMP JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH3 0x302 DUP3 DUP3 PUSH3 0x306 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH3 0x32B SWAP2 DUP4 SWAP1 PUSH3 0xDF2 PUSH3 0x36D DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST ISZERO PUSH3 0x302 JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP5 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D SWAP1 PUSH1 0x0 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x37B DUP4 DUP4 PUSH3 0x3D6 JUMP JUMPDEST PUSH3 0x3CC JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH3 0x3D0 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x43A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x46A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x46A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x46A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x44D JUMP JUMPDEST POP PUSH3 0x478 SWAP3 SWAP2 POP PUSH3 0x47C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x478 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x47D JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x163F PUSH3 0x4C9 PUSH1 0x0 CODECOPY DUP1 PUSH2 0xBD3 MSTORE POP DUP1 PUSH2 0x102C MSTORE POP DUP1 PUSH2 0x106E MSTORE POP DUP1 PUSH2 0x104D MSTORE POP PUSH2 0x163F 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 0x1C4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x79CC6790 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xD5391393 EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5E5 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0xCA15C873 EQ PUSH2 0x543 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x91D14854 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4D3 JUMPI DUP1 PUSH4 0x9711715A EQ PUSH2 0x4DB JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x4E3 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x79CC6790 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0x9010D07C EQ PUSH2 0x468 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x40C10F19 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x42966C68 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x7028E2CD EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3F0 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x33F JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x373 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x2D6 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x321 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x286 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D1 PUSH2 0x613 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x238 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x28E PUSH2 0x6DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x6E4 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x738 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x74D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x329 PUSH2 0x7CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x28E PUSH2 0x7D5 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x389 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x84F JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x885 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST PUSH2 0x28E PUSH2 0x931 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x955 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x970 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A6 JUMP JUMPDEST PUSH2 0x48B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x47E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x9C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x1D1 PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x31F PUSH2 0xA77 JUMP JUMPDEST PUSH2 0x28E PUSH2 0xB42 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xB47 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xB80 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB8D JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0xBA4 JUMP JUMPDEST PUSH2 0x28E PUSH2 0xD32 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD56 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xDC7 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6BD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x692 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6BD 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 0x6A0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6D4 CALLER DUP5 DUP5 PUSH2 0xE6D JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6F1 DUP5 DUP5 DUP5 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x72E SWAP2 DUP7 SWAP2 PUSH2 0x729 SWAP1 DUP7 PUSH2 0x19E PUSH2 0xFB9 JUMP JUMPDEST PUSH2 0xE6D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH2 0x769 SWAP1 CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x7BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x157C PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C8 DUP3 DUP3 PUSH2 0xFCF JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7DF PUSH2 0x1028 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER EQ PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15DB PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C8 DUP3 DUP3 PUSH2 0x10E6 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 0x6D4 SWAP2 DUP6 SWAP1 PUSH2 0x729 SWAP1 DUP7 PUSH2 0x113F JUMP JUMPDEST PUSH2 0x8AF PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x91A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F4D494E54455200000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x7C8 DUP3 DUP3 PUSH2 0x1151 JUMP JUMPDEST PUSH2 0x92E CALLER DUP3 PUSH2 0x11E8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x5FDBD35E8DA83EE755D5E62A539E5ED7F47126ABEDE0B8B10F9EA43DC6EED07F DUP2 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 PUSH1 0x0 PUSH2 0x98A DUP3 PUSH2 0x1A1 PUSH2 0x983 DUP7 CALLER PUSH2 0xDC7 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xFB9 JUMP JUMPDEST SWAP1 POP PUSH2 0x997 DUP4 CALLER DUP4 PUSH2 0xE6D JUMP JUMPDEST PUSH2 0x9A1 DUP4 DUP4 PUSH2 0x11E8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x9D9 SWAP1 DUP4 PUSH2 0x129F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x9D9 SWAP1 DUP4 PUSH2 0x12BB JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6BD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x692 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6BD JUMP JUMPDEST PUSH2 0xAA1 PUSH32 0x5FDBD35E8DA83EE755D5E62A539E5ED7F47126ABEDE0B8B10F9EA43DC6EED07F CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0xB0C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F534E415053484F545445520000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x8030E83B04D87BEF53480E26263266D6CA66863AA8506ACA6F2559D18AA1CB67 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 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 0x6D4 SWAP2 DUP6 SWAP1 PUSH2 0x729 SWAP1 DUP7 PUSH2 0x19F PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6D4 CALLER DUP5 DUP5 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x6D8 SWAP1 PUSH2 0x12DC JUMP JUMPDEST PUSH2 0xBB2 DUP5 TIMESTAMP GT ISZERO PUSH1 0xD1 PUSH2 0x12E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD PUSH32 0x0 DUP2 DUP6 ADD MSTORE DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP5 DUP12 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD DUP11 SWAP1 MSTORE PUSH1 0xA0 DUP5 ADD DUP6 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 SWAP1 PUSH2 0xC3E DUP3 PUSH2 0x12EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC9C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP PUSH2 0xCFC SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xCF4 JUMPI POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x1F8 PUSH2 0x12E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP6 ADD SWAP1 SSTORE PUSH2 0xD25 DUP12 DUP12 DUP12 PUSH2 0xE6D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH2 0xD72 SWAP1 CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15AB PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT 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 PUSH1 0x0 PUSH2 0xDFE DUP4 DUP4 PUSH2 0x12BB JUMP JUMPDEST PUSH2 0xE65 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x6D8 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x6D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0xEE6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0xEFD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0xF08 DUP4 DUP4 DUP4 PUSH2 0x9A1 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 PUSH2 0xF2E SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xF5D SWAP1 DUP3 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFC8 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x12E0 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xFE7 SWAP1 DUP3 PUSH2 0xDF2 JUMP JUMPDEST ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP5 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D SWAP1 PUSH1 0x0 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x1095 PUSH2 0x1355 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x10FE SWAP1 DUP3 PUSH2 0x1359 JUMP JUMPDEST ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP5 SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP1 PUSH1 0x0 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x9D9 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0x115D PUSH1 0x0 DUP4 DUP4 PUSH2 0x9A1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x116A SWAP1 DUP3 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x3 SSTORE 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 PUSH2 0x1190 SWAP1 DUP3 PUSH2 0x113F 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 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x11FF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0x120B DUP3 PUSH1 0x0 DUP4 PUSH2 0x9A1 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 PUSH2 0x1231 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0xFB9 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 SSTORE PUSH1 0x3 SLOAD PUSH2 0x1257 SWAP1 DUP3 PUSH2 0x14D3 JUMP JUMPDEST PUSH1 0x3 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x12B1 SWAP1 DUP4 LT PUSH1 0x64 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0x9D9 DUP4 DUP4 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 PUSH2 0x7C8 JUMPI PUSH2 0x7C8 DUP2 PUSH2 0x150E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12F8 PUSH2 0x1028 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP 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 CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x14C9 JUMPI DUP4 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 ADD SWAP2 ADD DUP1 DUP3 EQ PUSH2 0x143B JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x13BA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 DUP9 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x13E3 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP4 ADD SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x1446 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP3 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP4 POP PUSH2 0x6D8 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x6D8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D9 DUP4 DUP4 PUSH1 0x1 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x14F2 JUMPI INVALID 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 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID COINBASE PUSH4 0x63657373 NUMBER PUSH16 0x6E74726F6C3A2073656E646572206D75 PUSH20 0x7420626520616E2061646D696E20746F20677261 PUSH15 0x74416363657373436F6E74726F6C3A KECCAK256 PUSH20 0x656E646572206D75737420626520616E2061646D PUSH10 0x6E20746F207265766F6B PUSH6 0x416363657373 NUMBER PUSH16 0x6E74726F6C3A2063616E206F6E6C7920 PUSH19 0x656E6F756E636520726F6C657320666F722073 PUSH6 0x6C66A2646970 PUSH7 0x735822122053D3 PUSH26 0x281D6492973346C0AB6C3A49EF57FFBA220708DE36AE2F9EF2DC DUP1 0x48 0xBE PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "991:876:73:-:0;;;931:109:42;886:154;;1254:301:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1254:301:73;;;;;;;;;;-1:-1:-1;1254:301:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1254:301:73;;;;;;;;;;-1:-1:-1;1254:301:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:4;1311::42;2020:280:39;;;;;;;;;;;;;-1:-1:-1;;;2020:280:39;;;1359:4:73;1365:6;2126:5:40;2118;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2141:17:40;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:40;:14;;-1:-1:-1;;2168:14:40;2180:2;2168:14;;;;;;2100:22:39;;;;;;;2085:37;;2150:25;;;;;;;;;;2132:43;;-1:-1:-1;2198:95:39;2185:108;;1401:18:73::2;::::0;-1:-1:-1;1401:14:73::2;:18::i;:::-;1429:37;1934:4:72;1460:5:73::0;1429:10:::2;:37::i;:::-;1476:30;1118:24;1500:5:::0;1476:10:::2;:30::i;:::-;1516:32;1188:26;1542:5:::0;1516:10:::2;:32::i;:::-;1254:301:::0;;;991:876;;9995:88:40;10055:9;:21;;-1:-1:-1;;10055:21:40;;;;;;;;;;;;9995:88::o;6821:110:72:-;6899:25;6910:4;6916:7;6899:10;:25::i;:::-;6821:110;;:::o;7258:182::-;7331:6;:12;;;;;;;;;;;:33;;7356:7;;7331:24;;;;;:33;;:::i;:::-;7327:107;;;7385:38;;7412:10;;-1:-1:-1;;;;;7385:38:72;;;7397:4;;7385:38;;;;;7258:182;;:::o;1851:410:43:-;1921:4;1942:20;1951:3;1956:5;1942:8;:20::i;:::-;1937:318;;-1:-1:-1;1978:23:43;;;;;;;;-1:-1:-1;1978:23:43;;;;;;;;;;;;-1:-1:-1;;;;;;1978:23:43;-1:-1:-1;;;;;1978:23:43;;;;;;;;2158:18;;2136:19;;;:12;;;:19;;;;;;:40;;;;2190:11;;1937:318;-1:-1:-1;2239:5:43;1937:318;1851:410;;;;:::o;3977:134::-;-1:-1:-1;;;;;4080:19:43;4057:4;4080:19;;;:12;;;;;:19;;;;;;:24;;;3977:134::o;991:876:73:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;991:876:73;;;-1:-1:-1;991:876:73;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "3136": [ + { + "length": 32, + "start": 4173 + } + ], + "3138": [ + { + "length": 32, + "start": 4206 + } + ], + "3140": [ + { + "length": 32, + "start": 4140 + } + ], + "3780": [ + { + "length": 32, + "start": 3027 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101c45760003560e01c806379cc6790116100f9578063a457c2d711610097578063d505accf11610071578063d505accf14610560578063d5391393146105b1578063d547741f146105b9578063dd62ed3e146105e5576101c4565b8063a457c2d7146104eb578063a9059cbb14610517578063ca15c87314610543576101c4565b806391d14854116100d357806391d14854146104a757806395d89b41146104d35780639711715a146104db578063a217fddf146104e3576101c4565b806379cc6790146104165780637ecebe00146104425780639010d07c14610468576101c4565b80633644e5151161016657806340c10f191161014057806340c10f191461039f57806342966c68146103cb5780637028e2cd146103e857806370a08231146103f0576101c4565b80633644e5151461033f57806336568abe146103475780633950935114610373576101c4565b806323b872dd116101a257806323b872dd146102a0578063248a9ca3146102d65780632f2ff15d146102f3578063313ce56714610321576101c4565b806306fdde03146101c9578063095ea7b31461024657806318160ddd14610286575b600080fd5b6101d1610613565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102726004803603604081101561025c57600080fd5b506001600160a01b0381351690602001356106c7565b604080519115158252519081900360200190f35b61028e6106de565b60408051918252519081900360200190f35b610272600480360360608110156102b657600080fd5b506001600160a01b038135811691602081013590911690604001356106e4565b61028e600480360360208110156102ec57600080fd5b5035610738565b61031f6004803603604081101561030957600080fd5b50803590602001356001600160a01b031661074d565b005b6103296107cc565b6040805160ff9092168252519081900360200190f35b61028e6107d5565b61031f6004803603604081101561035d57600080fd5b50803590602001356001600160a01b03166107e4565b6102726004803603604081101561038957600080fd5b506001600160a01b03813516906020013561084f565b61031f600480360360408110156103b557600080fd5b506001600160a01b038135169060200135610885565b61031f600480360360208110156103e157600080fd5b5035610924565b61028e610931565b61028e6004803603602081101561040657600080fd5b50356001600160a01b0316610955565b61031f6004803603604081101561042c57600080fd5b506001600160a01b038135169060200135610970565b61028e6004803603602081101561045857600080fd5b50356001600160a01b03166109a6565b61048b6004803603604081101561047e57600080fd5b50803590602001356109c1565b604080516001600160a01b039092168252519081900360200190f35b610272600480360360408110156104bd57600080fd5b50803590602001356001600160a01b03166109e0565b6101d16109f8565b61031f610a77565b61028e610b42565b6102726004803603604081101561050157600080fd5b506001600160a01b038135169060200135610b47565b6102726004803603604081101561052d57600080fd5b506001600160a01b038135169060200135610b80565b61028e6004803603602081101561055957600080fd5b5035610b8d565b61031f600480360360e081101561057657600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610ba4565b61028e610d32565b61031f600480360360408110156105cf57600080fd5b50803590602001356001600160a01b0316610d56565b61028e600480360360408110156105fb57600080fd5b506001600160a01b0381358116916020013516610dc7565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bd5780601f10610692576101008083540402835291602001916106bd565b820191906000526020600020905b8154815290600101906020018083116106a057829003601f168201915b5050505050905090565b60006106d4338484610e6d565b5060015b92915050565b60035490565b60006106f1848484610ecf565b6001600160a01b03841660009081526002602090815260408083203380855292529091205461072e918691610729908661019e610fb9565b610e6d565b5060019392505050565b60009081526020819052604090206002015490565b60008281526020819052604090206002015461076990336109e0565b6107be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061157c602f913960400191505060405180910390fd5b6107c88282610fcf565b5050565b60065460ff1690565b60006107df611028565b905090565b6001600160a01b0381163314610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806115db602f913960400191505060405180910390fd5b6107c882826110e6565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106d4918590610729908661113f565b6108af7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336109e0565b61091a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f4d494e54455200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6107c88282611151565b61092e33826111e8565b50565b7f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f81565b6001600160a01b031660009081526001602052604090205490565b600061098a826101a16109838633610dc7565b9190610fb9565b9050610997833383610e6d565b6109a183836111e8565b505050565b6001600160a01b031660009081526007602052604090205490565b60008281526020819052604081206109d9908361129f565b9392505050565b60008281526020819052604081206109d990836112bb565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bd5780601f10610692576101008083540402835291602001916106bd565b610aa17f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f336109e0565b610b0c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f545f534e415053484f545445520000000000000000000000000000000000604482015290519081900360640190fd5b604080516000815290517f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb679181900360200190a1565b600081565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106d4918590610729908661019f610fb9565b60006106d4338484610ecf565b60008181526020819052604081206106d8906112dc565b610bb28442111560d16112e0565b6001600160a01b0380881660008181526007602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e09094019052825192019190912090610c3e826112ee565b9050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610c9c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150610cfc90506001600160a01b03821615801590610cf457508b6001600160a01b0316826001600160a01b0316145b6101f86112e0565b6001600160a01b038b166000908152600760205260409020600185019055610d258b8b8b610e6d565b5050505050505050505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b600082815260208190526040902060020154610d7290336109e0565b610845576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806115ab6030913960400191505060405180910390fd5b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000610dfe83836112bb565b610e6557508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038616908117909155855490825282860190935260409020919091556106d8565b5060006106d8565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b610ee66001600160a01b03841615156101986112e0565b610efd6001600160a01b03831615156101996112e0565b610f088383836109a1565b6001600160a01b038316600090815260016020526040902054610f2e90826101a0610fb9565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610f5d908261113f565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000610fc884841115836112e0565b5050900390565b6000828152602081905260409020610fe79082610df2565b156107c85760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611095611355565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b60008281526020819052604090206110fe9082611359565b156107c85760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b60008282016109d984821015836112e0565b61115d600083836109a1565b60035461116a908261113f565b6003556001600160a01b038216600090815260016020526040902054611190908261113f565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6111ff6001600160a01b038316151561019b6112e0565b61120b826000836109a1565b6001600160a01b03821660009081526001602052604090205461123190826101b2610fb9565b6001600160a01b03831660009081526001602052604090205560035461125790826114d3565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b81546000906112b190831060646112e0565b6109d983836114e1565b6001600160a01b031660009081526001919091016020526040902054151590565b5490565b816107c8576107c88161150e565b60006112f8611028565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b4690565b6001600160a01b038116600090815260018301602052604081205480156114c95783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301910180821461143b5760008660000182815481106113ba57fe5b60009182526020909120015487546001600160a01b03909116915081908890859081106113e357fe5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0394851617905592909116815260018881019092526040902090830190555b855486908061144657fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559092019092556001600160a01b03871682526001888101909152604082209190915593506106d892505050565b60009150506106d8565b60006109d983836001610fb9565b60008260000182815481106114f257fe5b6000918252602090912001546001600160a01b03169392505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fdfe416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122053d379281d6492973346c0ab6c3a49ef57ffba220708de36ae2f9ef2dc8048be64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1C4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x79CC6790 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xD5391393 EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5E5 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0xCA15C873 EQ PUSH2 0x543 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x91D14854 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4D3 JUMPI DUP1 PUSH4 0x9711715A EQ PUSH2 0x4DB JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x4E3 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x79CC6790 EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0x9010D07C EQ PUSH2 0x468 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x40C10F19 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x42966C68 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x7028E2CD EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3F0 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x33F JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x373 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x2D6 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x321 JUMPI PUSH2 0x1C4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x286 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D1 PUSH2 0x613 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x238 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x28E PUSH2 0x6DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x6E4 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x738 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x74D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x329 PUSH2 0x7CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x28E PUSH2 0x7D5 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x389 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x84F JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x885 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x924 JUMP JUMPDEST PUSH2 0x28E PUSH2 0x931 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x955 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x970 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9A6 JUMP JUMPDEST PUSH2 0x48B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x47E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x9C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x1D1 PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x31F PUSH2 0xA77 JUMP JUMPDEST PUSH2 0x28E PUSH2 0xB42 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xB47 JUMP JUMPDEST PUSH2 0x272 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xB80 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xB8D JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0xBA4 JUMP JUMPDEST PUSH2 0x28E PUSH2 0xD32 JUMP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD56 JUMP JUMPDEST PUSH2 0x28E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xDC7 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6BD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x692 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6BD 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 0x6A0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6D4 CALLER DUP5 DUP5 PUSH2 0xE6D JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6F1 DUP5 DUP5 DUP5 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x72E SWAP2 DUP7 SWAP2 PUSH2 0x729 SWAP1 DUP7 PUSH2 0x19E PUSH2 0xFB9 JUMP JUMPDEST PUSH2 0xE6D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH2 0x769 SWAP1 CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x7BE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x157C PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C8 DUP3 DUP3 PUSH2 0xFCF JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7DF PUSH2 0x1028 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER EQ PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2F DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15DB PUSH1 0x2F SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C8 DUP3 DUP3 PUSH2 0x10E6 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 0x6D4 SWAP2 DUP6 SWAP1 PUSH2 0x729 SWAP1 DUP7 PUSH2 0x113F JUMP JUMPDEST PUSH2 0x8AF PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x91A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F4D494E54455200000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x7C8 DUP3 DUP3 PUSH2 0x1151 JUMP JUMPDEST PUSH2 0x92E CALLER DUP3 PUSH2 0x11E8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x5FDBD35E8DA83EE755D5E62A539E5ED7F47126ABEDE0B8B10F9EA43DC6EED07F DUP2 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 PUSH1 0x0 PUSH2 0x98A DUP3 PUSH2 0x1A1 PUSH2 0x983 DUP7 CALLER PUSH2 0xDC7 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xFB9 JUMP JUMPDEST SWAP1 POP PUSH2 0x997 DUP4 CALLER DUP4 PUSH2 0xE6D JUMP JUMPDEST PUSH2 0x9A1 DUP4 DUP4 PUSH2 0x11E8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x9D9 SWAP1 DUP4 PUSH2 0x129F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x9D9 SWAP1 DUP4 PUSH2 0x12BB JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x6BD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x692 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6BD JUMP JUMPDEST PUSH2 0xAA1 PUSH32 0x5FDBD35E8DA83EE755D5E62A539E5ED7F47126ABEDE0B8B10F9EA43DC6EED07F CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0xB0C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F534E415053484F545445520000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x8030E83B04D87BEF53480E26263266D6CA66863AA8506ACA6F2559D18AA1CB67 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP2 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 0x6D4 SWAP2 DUP6 SWAP1 PUSH2 0x729 SWAP1 DUP7 PUSH2 0x19F PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6D4 CALLER DUP5 DUP5 PUSH2 0xECF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x6D8 SWAP1 PUSH2 0x12DC JUMP JUMPDEST PUSH2 0xBB2 DUP5 TIMESTAMP GT ISZERO PUSH1 0xD1 PUSH2 0x12E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD PUSH32 0x0 DUP2 DUP6 ADD MSTORE DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP5 DUP12 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD DUP11 SWAP1 MSTORE PUSH1 0xA0 DUP5 ADD DUP6 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP6 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 SWAP1 SWAP5 ADD SWAP1 MSTORE DUP3 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 SWAP1 PUSH2 0xC3E DUP3 PUSH2 0x12EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC9C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP PUSH2 0xCFC SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xCF4 JUMPI POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST PUSH2 0x1F8 PUSH2 0x12E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP6 ADD SWAP1 SSTORE PUSH2 0xD25 DUP12 DUP12 DUP12 PUSH2 0xE6D JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH2 0xD72 SWAP1 CALLER PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x15AB PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT 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 PUSH1 0x0 PUSH2 0xDFE DUP4 DUP4 PUSH2 0x12BB JUMP JUMPDEST PUSH2 0xE65 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP1 DUP3 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP6 SLOAD SWAP1 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x6D8 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x6D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 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 DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0xEE6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0xEFD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0xF08 DUP4 DUP4 DUP4 PUSH2 0x9A1 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 PUSH2 0xF2E SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xF5D SWAP1 DUP3 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFC8 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x12E0 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xFE7 SWAP1 DUP3 PUSH2 0xDF2 JUMP JUMPDEST ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP5 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D SWAP1 PUSH1 0x0 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x1095 PUSH2 0x1355 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x10FE SWAP1 DUP3 PUSH2 0x1359 JUMP JUMPDEST ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP5 SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP1 PUSH1 0x0 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x9D9 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0x115D PUSH1 0x0 DUP4 DUP4 PUSH2 0x9A1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x116A SWAP1 DUP3 PUSH2 0x113F JUMP JUMPDEST PUSH1 0x3 SSTORE 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 PUSH2 0x1190 SWAP1 DUP3 PUSH2 0x113F 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 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x11FF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0x120B DUP3 PUSH1 0x0 DUP4 PUSH2 0x9A1 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 PUSH2 0x1231 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0xFB9 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 SSTORE PUSH1 0x3 SLOAD PUSH2 0x1257 SWAP1 DUP3 PUSH2 0x14D3 JUMP JUMPDEST PUSH1 0x3 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x12B1 SWAP1 DUP4 LT PUSH1 0x64 PUSH2 0x12E0 JUMP JUMPDEST PUSH2 0x9D9 DUP4 DUP4 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST DUP2 PUSH2 0x7C8 JUMPI PUSH2 0x7C8 DUP2 PUSH2 0x150E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12F8 PUSH2 0x1028 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP 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 CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x14C9 JUMPI DUP4 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 ADD SWAP2 ADD DUP1 DUP3 EQ PUSH2 0x143B JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x13BA JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD DUP8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 DUP9 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x13E3 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP4 ADD SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x1446 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP3 MSTORE PUSH1 0x1 DUP9 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP4 POP PUSH2 0x6D8 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x6D8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D9 DUP4 DUP4 PUSH1 0x1 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x14F2 JUMPI INVALID 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 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH7 0x42414C23000030 PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD SWAP1 SWAP5 ADD PUSH1 0x10 SHL SWAP4 SWAP1 SWAP4 ADD ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 REVERT INVALID COINBASE PUSH4 0x63657373 NUMBER PUSH16 0x6E74726F6C3A2073656E646572206D75 PUSH20 0x7420626520616E2061646D696E20746F20677261 PUSH15 0x74416363657373436F6E74726F6C3A KECCAK256 PUSH20 0x656E646572206D75737420626520616E2061646D PUSH10 0x6E20746F207265766F6B PUSH6 0x416363657373 NUMBER PUSH16 0x6E74726F6C3A2063616E206F6E6C7920 PUSH19 0x656E6F756E636520726F6C657320666F722073 PUSH6 0x6C66A2646970 PUSH7 0x735822122053D3 PUSH26 0x281D6492973346C0AB6C3A49EF57FFBA220708DE36AE2F9EF2DC DUP1 0x48 0xBE PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "991:876:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:164;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4288:164:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3297:98;;;:::i;:::-;;;;;;;;;;;;;;;;4919:386;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4919:386:40;;;;;;;;;;;;;;;;;:::i;4521:112:72:-;;;;;;;;;;;;;;;;-1:-1:-1;4521:112:72;;:::i;4883:221::-;;;;;;;;;;;;;;;;-1:-1:-1;4883:221:72;;;;;;-1:-1:-1;;;;;4883:221:72;;:::i;:::-;;3156:81:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2493:113:42;;;:::i;6053:203:72:-;;;;;;;;;;;;;;;;-1:-1:-1;6053:203:72;;;;;;-1:-1:-1;;;;;6053:203:72;;:::i;5700:211:40:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5700:211:40;;;;;;;;:::i;1561:164:73:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1561:164:73;;;;;;;;:::i;473:87:41:-;;;;;;;;;;;;;;;;-1:-1:-1;473:87:41;;:::i;1148:66:73:-;;;:::i;3453:117:40:-;;;;;;;;;;;;;;;;-1:-1:-1;3453:117:40;-1:-1:-1;;;;;3453:117:40;;:::i;866:283:41:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;866:283:41;;;;;;;;:::i;2261:108:42:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:108:42;-1:-1:-1;;;;;2261:108:42;;:::i;4204:136:72:-;;;;;;;;;;;;;;;;-1:-1:-1;4204:136:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;4204:136:72;;;;;;;;;;;;;;3112:137;;;;;;;;;;;;;;;;-1:-1:-1;3112:137:72;;;;;;-1:-1:-1;;;;;3112:137:72;;:::i;2448:85:40:-;;;:::i;1731:134:73:-;;;:::i;1889:49:72:-;;;:::i;6398:312:40:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6398:312:40;;;;;;;;:::i;3773:170::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3773:170:40;;;;;;;;:::i;3417:125:72:-;;;;;;;;;;;;;;;;-1:-1:-1;3417:125:72;;:::i;1447:753:42:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1447:753:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1080:62:73:-;;;:::i;5338:224:72:-;;;;;;;;;;;;;;;;-1:-1:-1;5338:224:72;;;;;;-1:-1:-1;;;;;5338:224:72;;:::i;4001:149:40:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4001:149:40;;;;;;;;;;:::i;2254:81::-;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4288:164::-;4371:4;4387:37;4396:10;4408:7;4417:6;4387:8;:37::i;:::-;-1:-1:-1;4441:4:40;4288:164;;;;;:::o;3297:98::-;3376:12;;3297:98;:::o;4919:386::-;5055:4;5071:36;5081:6;5089:9;5100:6;5071:9;:36::i;:::-;-1:-1:-1;;;;;5183:19:40;;;;;;:11;:19;;;;;;;;5159:10;5183:31;;;;;;;;;5117:160;;5139:6;;5183:84;;5219:6;9861:3:20;5183:35:40;:84::i;:::-;5117:8;:160::i;:::-;-1:-1:-1;5294:4:40;4919:386;;;;;:::o;4521:112:72:-;4578:7;4604:12;;;;;;;;;;:22;;;;4521:112::o;4883:221::-;4974:6;:12;;;;;;;;;;:22;;;4966:43;;4998:10;4966:7;:43::i;:::-;4958:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5072:25;5083:4;5089:7;5072:10;:25::i;:::-;4883:221;;:::o;3156:81:40:-;3221:9;;;;3156:81;:::o;2493:113:42:-;2553:7;2579:20;:18;:20::i;:::-;2572:27;;2493:113;:::o;6053:203:72:-;-1:-1:-1;;;;;6139:21:72;;6150:10;6139:21;6131:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6223:26;6235:4;6241:7;6223:11;:26::i;5700:211:40:-;5813:10;5788:4;5834:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;5834:32:40;;;;;;;;;;5788:4;;5804:79;;5825:7;;5834:48;;5871:10;5834:36;:48::i;1561:164:73:-;1637:32;1118:24;1658:10;1637:7;:32::i;:::-;1629:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1694:24;1700:9;1711:6;1694:5;:24::i;473:87:41:-;528:25;534:10;546:6;528:5;:25::i;:::-;473:87;:::o;1148:66:73:-;1188:26;1148:66;:::o;3453:117:40:-;-1:-1:-1;;;;;3545:18:40;3519:7;3545:18;;;:9;:18;;;;;;;3453:117::o;866:283:41:-;942:26;971:79;1006:6;10069:3:20;971:30:41;981:7;990:10;971:9;:30::i;:::-;:34;:79;:34;:79::i;:::-;942:108;;1061:49;1070:7;1079:10;1091:18;1061:8;:49::i;:::-;1120:22;1126:7;1135:6;1120:5;:22::i;:::-;866:283;;;:::o;2261:108:42:-;-1:-1:-1;;;;;2348:14:42;2322:7;2348:14;;;:7;:14;;;;;;;2261:108::o;4204:136:72:-;4277:7;4303:12;;;;;;;;;;:30;;4327:5;4303:23;:30::i;:::-;4296:37;4204:136;-1:-1:-1;;;4204:136:72:o;3112:137::-;3181:4;3204:12;;;;;;;;;;:38;;3234:7;3204:29;:38::i;2448:85:40:-;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;1731:134:73;1778:34;1188:26;1801:10;1778:7;:34::i;:::-;1770:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1847:11;;;1856:1;1847:11;;;;;;;;;;;;;1731:134::o;1889:49:72:-;1934:4;1889:49;:::o;6398:312:40:-;6529:10;6491:4;6574:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6574:32:40;;;;;;;;;;6491:4;;6507:175;;6553:7;;6574:98;;6611:15;9935:3:20;6574:36:40;:98::i;3773:170::-;3859:4;3875:40;3885:10;3897:9;3908:6;3875:9;:40::i;3417:125:72:-;3480:7;3506:12;;;;;;;;;;:29;;:27;:29::i;1447:753:42:-;1709:60;1737:8;1718:15;:27;;5606:3:20;1709:8:42;:60::i;:::-;-1:-1:-1;;;;;1796:14:42;;;1780:13;1796:14;;;:7;:14;;;;;;;;;1851:68;;1862:16;1851:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1841:79;;;;;;;;;1946:28;1841:79;1946:16;:28::i;:::-;1931:43;;1985:14;2002:24;2012:4;2018:1;2021;2024;2002:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2002:24:42;;;;;;-1:-1:-1;2036:79:42;;-1:-1:-1;;;;;;2046:20:42;;;;;;2045:43;;;2082:5;-1:-1:-1;;;;;2072:15:42;:6;-1:-1:-1;;;;;2072:15:42;;2045:43;11454:3:20;2036:8:42;:79::i;:::-;-1:-1:-1;;;;;2126:14:42;;;;;;:7;:14;;;;;2151:1;2143:9;;2126:26;;2162:31;2134:5;2178:7;2187:5;2162:8;:31::i;:::-;1447:753;;;;;;;;;;;:::o;1080:62:73:-;1118:24;1080:62;:::o;5338:224:72:-;5430:6;:12;;;;;;;;;;:22;;;5422:43;;5454:10;5422:7;:43::i;:::-;5414:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4001:149:40;-1:-1:-1;;;;;4116:18:40;;;4090:7;4116:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4001:149::o;1851:410:43:-;1921:4;1942:20;1951:3;1956:5;1942:8;:20::i;:::-;1937:318;;-1:-1:-1;1978:23:43;;;;;;;;-1:-1:-1;1978:23:43;;;;;;;;;;;;;;-1:-1:-1;;;;;1978:23:43;;;;;;;;2158:18;;2136:19;;;:12;;;:19;;;;;;:40;;;;2190:11;;1937:318;-1:-1:-1;2239:5:43;2232:12;;9459:213:40;-1:-1:-1;;;;;9582:18:40;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9633:32;;;;;;;;;;;;;;;;;9459:213;;;:::o;7184:559::-;7311:71;-1:-1:-1;;;;;7320:20:40;;;;9457:3:20;7311:8:40;:71::i;:::-;7392:72;-1:-1:-1;;;;;7401:23:40;;;;9525:3:20;7392:8:40;:72::i;:::-;7475:47;7496:6;7504:9;7515:6;7475:20;:47::i;:::-;-1:-1:-1;;;;;7553:17:40;;;;;;:9;:17;;;;;;:68;;7575:6;10003:3:20;7553:21:40;:68::i;:::-;-1:-1:-1;;;;;7533:17:40;;;;;;;:9;:17;;;;;;:88;;;;7654:20;;;;;;;:32;;7679:6;7654:24;:32::i;:::-;-1:-1:-1;;;;;7631:20:40;;;;;;;:9;:20;;;;;;;;;:55;;;;7701:35;;;;;;;7631:20;;7701:35;;;;;;;;;;;;;7184:559;;;:::o;1816:206:46:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:46;;;1816:206::o;7258:182:72:-;7331:6;:12;;;;;;;;;;:33;;7356:7;7331:24;:33::i;:::-;7327:107;;;7385:38;;7412:10;;-1:-1:-1;;;;;7385:38:72;;;7397:4;;7385:38;;;;;7258:182;;:::o;2386:188:39:-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2483:83:39;;;;;;;;;;;;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;7446:186:72:-;7520:6;:12;;;;;;;;;;:36;;7548:7;7520:27;:36::i;:::-;7516:110;;;7577:38;;7604:10;;-1:-1:-1;;;;;7577:38:72;;;7589:4;;7577:38;;;;;7446:186;;:::o;966:167:46:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;8014:294:40:-;8089:49;8118:1;8122:7;8131:6;8089:20;:49::i;:::-;8164:12;;:24;;8181:6;8164:16;:24::i;:::-;8149:12;:39;-1:-1:-1;;;;;8219:18:40;;;;;;:9;:18;;;;;;:30;;8242:6;8219:22;:30::i;:::-;-1:-1:-1;;;;;8198:18:40;;;;;;:9;:18;;;;;;;;:51;;;;8264:37;;;;;;;8198:18;;;;8264:37;;;;;;;;;;8014:294;;:::o;8628:408::-;8703:68;-1:-1:-1;;;;;8712:21:40;;;;9655:3:20;8703:8:40;:68::i;:::-;8782:49;8803:7;8820:1;8824:6;8782:20;:49::i;:::-;-1:-1:-1;;;;;8863:18:40;;;;;;:9;:18;;;;;;:65;;8886:6;11099:3:20;8863:22:40;:65::i;:::-;-1:-1:-1;;;;;8842:18:40;;;;;;:9;:18;;;;;:86;8953:12;;:24;;8970:6;8953:16;:24::i;:::-;8938:12;:39;8992:37;;;;;;;;9018:1;;-1:-1:-1;;;;;8992:37:40;;;;;;;;;;;;8628:408;;:::o;4648:199:43:-;4750:18;;4722:7;;4741:58;;4750:26;-1:-1:-1;4838:3:20;4741:8:43;:58::i;:::-;4816:24;4829:3;4834:5;4816:12;:24::i;3977:134::-;-1:-1:-1;;;;;4080:19:43;4057:4;4080:19;;;:12;;;;;:19;;;;;;:24;;;3977:134::o;4192:114::-;4281:18;;4192:114::o;866:101:20:-;935:9;930:34;;946:18;954:9;946:7;:18::i;3199:183:39:-;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3302:73;;;;;;3295:80;;3199:183;;;:::o;3388:427::-;3790:9;;3765:44::o;2429:1467:43:-;-1:-1:-1;;;;;2639:19:43;;2502:4;2639:19;;;:12;;;:19;;;;;;2673:15;;2669:1221;;3114:18;;3066:14;;;;;3114:22;3236:26;;;3232:389;;3282:17;3302:3;:11;;3314:9;3302:22;;;;;;;;;;;;;;;;;;3424:26;;-1:-1:-1;;;;;3302:22:43;;;;-1:-1:-1;3302:22:43;;3424:3;;3436:13;;3424:26;;;;;;;;;;;;;;;;;;:38;;;;-1:-1:-1;;;;;3424:38:43;;;;;;3536:23;;;;;;-1:-1:-1;3536:12:43;;;:23;;;;;;3562:17;;;3536:43;;3232:389;3699:17;;:3;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3791:19:43;;;;3699:17;3791:12;;;:19;;;;;;3784:26;;;;3699:17;-1:-1:-1;3825:11:43;;-1:-1:-1;;;3825:11:43;2669:1221;3874:5;3867:12;;;;;1404:121:46;1462:7;1488:30;1492:1;1495;4370::20;1488:3:46;:30::i;5212:135:43:-;5296:7;5322:3;:11;;5334:5;5322:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5322:18:43;;5212:135;-1:-1:-1;;;5212:135:43:o;1074:3172:20:-;3593:66;3588:3;3581:79;;;3799:66;3793:4;3786:80;3941:1;3935:4;3928:15;2999:73;2210:2;2243:18;;;2288;;;2215:4;2284:29;;;3040:1;3036:14;2195:18;;;;3025:26;;;;2336:18;;;;2383;;;2379:29;;;3057:2;3053:17;3021:50;;;;2999:73;2994:3;2990:83;4008:4;4001:26;4234:3;;4224:14" + }, + "methodIdentifiers": { + "DEFAULT_ADMIN_ROLE()": "a217fddf", + "DOMAIN_SEPARATOR()": "3644e515", + "MINTER_ROLE()": "d5391393", + "SNAPSHOT_ROLE()": "7028e2cd", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "burn(uint256)": "42966c68", + "burnFrom(address,uint256)": "79cc6790", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "getRoleAdmin(bytes32)": "248a9ca3", + "getRoleMember(bytes32,uint256)": "9010d07c", + "getRoleMemberCount(bytes32)": "ca15c873", + "grantRole(bytes32,address)": "2f2ff15d", + "hasRole(bytes32,address)": "91d14854", + "increaseAllowance(address,uint256)": "39509351", + "mint(address,uint256)": "40c10f19", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "renounceRole(bytes32,address)": "36568abe", + "revokeRole(bytes32,address)": "d547741f", + "snapshot()": "9711715a", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Snapshot\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SNAPSHOT_ROLE\",\"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\":\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"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\":[{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"snapshot\",\"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\":\"recipient\",\"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\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. 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 {_setupDecimals} is called. 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`.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"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}.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"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: - `recipient` 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\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestBalancerToken.sol\":\"TestBalancerToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x434d1a6d0455723b97d5e97ab6fac564ca37752c9749939bdddbeea6ec68d466\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a6c1ffc21943f566c11b80f239f55bd15d4bb1b8d03af4ca2ab7a4c722c12656\",\"dweb:/ipfs/Qma1Z9o3YeyxCyGpc5rUNzBywu7NwNsK7iHrcVVWDRnuBD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol\":{\"keccak256\":\"0xd0124aa262584bcdc163089547074252ace79201c02de2573fc8154cdc024b25\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://333957f2afd70aef1757e5e84a8ed6e5048eb8233448a3c67e7111ae9f01b6bc\",\"dweb:/ipfs/QmSQcuZH5rkS8D1PGt6tJZpkPM8onWPwNe24iEVjZWidt4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x20623aa7d1b93255067c3b4bf2a7570dbb1f2ff1c193f54153d341713fac05cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e14e095254afb92780d93c006d5cc607997a232be8ee81a373d046219bb54c50\",\"dweb:/ipfs/QmU5qYxtXNfj4qFGD2W2ekwje4VFSXK8cR89Tx9NvLh1cJ\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol\":{\"keccak256\":\"0x6df4b13f2ea83b6b7fd766ed4d2c9edbfed217825cb867ecf92ac11af44b9ae4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f644d0949a840356fd81eaf45a989ede75abe1e653ce1d5e59e82b7a13a97b4e\",\"dweb:/ipfs/QmUNEpURhR9LA8gwmvM6vbqmxcTVkiXcGHPSL5oCVCKVPZ\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0x4a58adfe4ffa5eef5647652230561a481d43a8581a4e7169b3960a0d60e04d91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d10af8e5d9396285b1bb0b9fb55acd9d05a0c84ed634783b4ddf4c55073ea37\",\"dweb:/ipfs/QmRX42mfQUG2HqZg8cQDfiFJ5DaxWHKNimyFpqn9PbfSJs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa644f3f9066d6a300bd7c1c214ce55c1569bb5ec54815d49c5c7a1a63cd03df3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81ee2467e6a0f340d64738d7a03a407e88caa5ee31cb3c8bd6990985f1891acc\",\"dweb:/ipfs/QmP7s6CSdDLGFjNxi9Q8GEVJFiD6QkeseGD857bPE7E7Ki\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/test/TestAccessControl.sol\":{\"keccak256\":\"0xd7e1e3bdde3a149dfc57de01e4d2fef1a3624af436ae95dfe444d8bfb25772b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1f209648a170f1cb287cc462a78a1733e027c14026bb052a4b8eb372c97d665\",\"dweb:/ipfs/QmYCg7YsmwzAzxLChiek7kFysvqNvSTi6wCeGvwGiYCksT\"]},\"contracts/test/TestBalancerToken.sol\":{\"keccak256\":\"0x42c98a8bdc6fdad15f90bb2944c47afc1cbdb5b347047ff05301e73fd7485385\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a87bf1323acdbb16eaf4615e1ee37e8e4e7f40a63a2c681e613ee88a57d151f\",\"dweb:/ipfs/QmRX15CoExSnvQB6SXrBC2ee48nfpb3JzvVPXAbdj99Jn9\"]}},\"version\":1}" + } + } + }, + "sources": { + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "exportedSymbols": { + "IAuthorizerAdaptor": [ + 28 + ] + }, + "id": 29, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:0" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 2, + "nodeType": "ImportDirective", + "scope": 29, + "sourceUnit": 1521, + "src": "713:55:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "../vault/IVault.sol", + "id": 3, + "nodeType": "ImportDirective", + "scope": 29, + "sourceUnit": 2289, + "src": "769:29:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 4, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1520, + "src": "832:15:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1520", + "typeString": "contract IAuthentication" + } + }, + "id": 5, + "nodeType": "InheritanceSpecifier", + "src": "832:15:0" + } + ], + "contractDependencies": [ + 1520 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 28, + "linearizedBaseContracts": [ + 28, + 1520 + ], + "name": "IAuthorizerAdaptor", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 6, + "nodeType": "StructuredDocumentation", + "src": "854:53:0", + "text": " @notice Returns the Balancer Vault" + }, + "functionSelector": "8d928af8", + "id": 11, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7, + "nodeType": "ParameterList", + "parameters": [], + "src": "929:2:0" + }, + "returnParameters": { + "id": 10, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11, + "src": "955:6:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 8, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "955:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "954:8:0" + }, + "scope": 28, + "src": "912:51:0", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 12, + "nodeType": "StructuredDocumentation", + "src": "969:49:0", + "text": " @notice Returns the Authorizer" + }, + "functionSelector": "aaabadc5", + "id": 17, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13, + "nodeType": "ParameterList", + "parameters": [], + "src": "1045:2:0" + }, + "returnParameters": { + "id": 16, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17, + "src": "1071:11:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 14, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1739, + "src": "1071:11:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1070:13:0" + }, + "scope": 28, + "src": "1023:61:0", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 18, + "nodeType": "StructuredDocumentation", + "src": "1090:331:0", + "text": " @notice Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\n @param target - Address of the contract to be called\n @param data - Calldata to be sent to the target contract\n @return The bytes encoded return value from the performed function call" + }, + "functionSelector": "4036176a", + "id": 27, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "performAction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 23, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 20, + "mutability": "mutable", + "name": "target", + "nodeType": "VariableDeclaration", + "scope": 27, + "src": "1449:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 19, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1449:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 22, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 27, + "src": "1465:19:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 21, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1465:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1448:37:0" + }, + "returnParameters": { + "id": 26, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 27, + "src": "1512:12:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 24, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1512:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1511:14:0" + }, + "scope": 28, + "src": "1426:100:0", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 29, + "src": "800:728:0" + } + ], + "src": "688:841:0" + }, + "id": 0 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol", + "exportedSymbols": { + "IBalancerMinter": [ + 175 + ] + }, + "id": 176, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 30, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:1" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "file": "./IBalancerTokenAdmin.sol", + "id": 31, + "nodeType": "ImportDirective", + "scope": 176, + "sourceUnit": 306, + "src": "713:35:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "file": "./IGaugeController.sol", + "id": 32, + "nodeType": "ImportDirective", + "scope": 176, + "sourceUnit": 721, + "src": "749:32:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 175, + "linearizedBaseContracts": [ + 175 + ], + "name": "IBalancerMinter", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "id": 40, + "name": "Minted", + "nodeType": "EventDefinition", + "parameters": { + "id": 39, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 34, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 40, + "src": "828:25:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 33, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "828:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 36, + "indexed": false, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 40, + "src": "855:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 35, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "855:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 38, + "indexed": false, + "mutability": "mutable", + "name": "minted", + "nodeType": "VariableDeclaration", + "scope": 40, + "src": "870:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 37, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "870:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "827:58:1" + }, + "src": "815:71:1" + }, + { + "documentation": { + "id": 41, + "nodeType": "StructuredDocumentation", + "src": "892:79:1", + "text": " @notice Returns the address of the Balancer Governance Token" + }, + "functionSelector": "c0039699", + "id": 46, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBalancerToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 42, + "nodeType": "ParameterList", + "parameters": [], + "src": "1001:2:1" + }, + "returnParameters": { + "id": 45, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 44, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 46, + "src": "1027:6:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 43, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1027:6:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1026:8:1" + }, + "scope": 175, + "src": "976:59:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 47, + "nodeType": "StructuredDocumentation", + "src": "1041:83:1", + "text": " @notice Returns the address of the Balancer Token Admin contract" + }, + "functionSelector": "e6dec36f", + "id": 52, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBalancerTokenAdmin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 48, + "nodeType": "ParameterList", + "parameters": [], + "src": "1159:2:1" + }, + "returnParameters": { + "id": 51, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 50, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 52, + "src": "1185:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + }, + "typeName": { + "id": 49, + "name": "IBalancerTokenAdmin", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 305, + "src": "1185:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "visibility": "internal" + } + ], + "src": "1184:21:1" + }, + "scope": 175, + "src": "1129:77:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 53, + "nodeType": "StructuredDocumentation", + "src": "1212:70:1", + "text": " @notice Returns the address of the Gauge Controller" + }, + "functionSelector": "58de9ade", + "id": 58, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGaugeController", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 54, + "nodeType": "ParameterList", + "parameters": [], + "src": "1314:2:1" + }, + "returnParameters": { + "id": 57, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 56, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 58, + "src": "1340:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 55, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "1340:16:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "internal" + } + ], + "src": "1339:18:1" + }, + "scope": 175, + "src": "1287:71:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 59, + "nodeType": "StructuredDocumentation", + "src": "1364:162:1", + "text": " @notice Mint everything which belongs to `msg.sender` and send to them\n @param gauge `LiquidityGauge` address to get mintable amount from" + }, + "functionSelector": "6a627842", + "id": 66, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 62, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 66, + "src": "1545:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1545:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1544:15:1" + }, + "returnParameters": { + "id": 65, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 64, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 66, + "src": "1578:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1578:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1577:9:1" + }, + "scope": 175, + "src": "1531:56:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 67, + "nodeType": "StructuredDocumentation", + "src": "1593:151:1", + "text": " @notice Mint everything which belongs to `msg.sender` across multiple gauges\n @param gauges List of `LiquidityGauge` addresses" + }, + "functionSelector": "397ada21", + "id": 75, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mintMany", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 71, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 70, + "mutability": "mutable", + "name": "gauges", + "nodeType": "VariableDeclaration", + "scope": 75, + "src": "1767:25:1", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 68, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1767:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 69, + "nodeType": "ArrayTypeName", + "src": "1767:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "1766:27:1" + }, + "returnParameters": { + "id": 74, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 73, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 75, + "src": "1812:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 72, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1812:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1811:9:1" + }, + "scope": 175, + "src": "1749:72:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 76, + "nodeType": "StructuredDocumentation", + "src": "1827:256:1", + "text": " @notice Mint tokens for `user`\n @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n @param gauge `LiquidityGauge` address to get mintable amount from\n @param user Address to mint to" + }, + "functionSelector": "7504a15d", + "id": 85, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mintFor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 81, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 85, + "src": "2105:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 77, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2105:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 80, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 85, + "src": "2120:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 79, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2120:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2104:29:1" + }, + "returnParameters": { + "id": 84, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 83, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 85, + "src": "2152:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 82, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2152:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2151:9:1" + }, + "scope": 175, + "src": "2088:73:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 86, + "nodeType": "StructuredDocumentation", + "src": "2167:262:1", + "text": " @notice Mint tokens for `user` across multiple gauges\n @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n @param gauges List of `LiquidityGauge` addresses\n @param user Address to mint to" + }, + "functionSelector": "3b9f7384", + "id": 96, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mintManyFor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 92, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 89, + "mutability": "mutable", + "name": "gauges", + "nodeType": "VariableDeclaration", + "scope": 96, + "src": "2455:25:1", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 87, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2455:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 88, + "nodeType": "ArrayTypeName", + "src": "2455:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 91, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 96, + "src": "2482:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 90, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2482:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2454:41:1" + }, + "returnParameters": { + "id": 95, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 94, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 96, + "src": "2514:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 93, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2514:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2513:9:1" + }, + "scope": 175, + "src": "2434:89:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 97, + "nodeType": "StructuredDocumentation", + "src": "2529:84:1", + "text": " @notice The total number of tokens minted for `user` from `gauge`" + }, + "functionSelector": "8b752bb0", + "id": 106, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "minted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 99, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "2634:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 98, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2634:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 101, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "2648:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 100, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2648:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2633:29:1" + }, + "returnParameters": { + "id": 105, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 104, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 106, + "src": "2686:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 103, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2686:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2685:9:1" + }, + "scope": 175, + "src": "2618:77:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 107, + "nodeType": "StructuredDocumentation", + "src": "2701:81:1", + "text": " @notice Whether `minter` is approved to mint tokens for `user`" + }, + "functionSelector": "3c543bc6", + "id": 116, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getMinterApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 112, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 109, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 116, + "src": "2814:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 108, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2814:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 111, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 116, + "src": "2830:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 110, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2830:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2813:30:1" + }, + "returnParameters": { + "id": 115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 114, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 116, + "src": "2867:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 113, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2867:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2866:6:1" + }, + "scope": 175, + "src": "2787:86:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 117, + "nodeType": "StructuredDocumentation", + "src": "2879:89:1", + "text": " @notice Set whether `minter` is approved to mint tokens on your behalf" + }, + "functionSelector": "0de54ba0", + "id": 124, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMinterApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 122, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 119, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 124, + "src": "3000:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 118, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3000:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 121, + "mutability": "mutable", + "name": "approval", + "nodeType": "VariableDeclaration", + "scope": 124, + "src": "3016:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 120, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3016:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2999:31:1" + }, + "returnParameters": { + "id": 123, + "nodeType": "ParameterList", + "parameters": [], + "src": "3039:0:1" + }, + "scope": 175, + "src": "2973:67:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 125, + "nodeType": "StructuredDocumentation", + "src": "3046:145:1", + "text": " @notice Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing\n them." + }, + "functionSelector": "c6542794", + "id": 142, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setMinterApprovalWithSignature", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 140, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 127, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "3245:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3245:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 129, + "mutability": "mutable", + "name": "approval", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "3269:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 128, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3269:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 131, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "3292:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 130, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3292:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 133, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "3314:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 132, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3314:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 135, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "3340:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 134, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3340:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 137, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "3357:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 136, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3357:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 139, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "3376:9:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 138, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3376:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3235:156:1" + }, + "returnParameters": { + "id": 141, + "nodeType": "ParameterList", + "parameters": [], + "src": "3400:0:1" + }, + "scope": 175, + "src": "3196:205:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 143, + "nodeType": "StructuredDocumentation", + "src": "3621:81:1", + "text": " @notice Whether `minter` is approved to mint tokens for `user`" + }, + "functionSelector": "a0990033", + "id": 152, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowed_to_mint_for", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 148, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 145, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "3736:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 144, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3736:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 147, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "3752:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 146, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3752:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3735:30:1" + }, + "returnParameters": { + "id": 151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 150, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 152, + "src": "3789:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 149, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3789:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3788:6:1" + }, + "scope": 175, + "src": "3707:88:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 153, + "nodeType": "StructuredDocumentation", + "src": "3801:247:1", + "text": " @notice Mint everything which belongs to `msg.sender` across multiple gauges\n @dev This function is not recommended as `mintMany()` is more flexible and gas efficient\n @param gauges List of `LiquidityGauge` addresses" + }, + "functionSelector": "a51e1904", + "id": 160, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint_many", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 157, + "mutability": "mutable", + "name": "gauges", + "nodeType": "VariableDeclaration", + "scope": 160, + "src": "4072:26:1", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_calldata_ptr", + "typeString": "address[8]" + }, + "typeName": { + "baseType": { + "id": 154, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4072:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 156, + "length": { + "hexValue": "38", + "id": 155, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4080:1:1", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "4072:10:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_storage_ptr", + "typeString": "address[8]" + } + }, + "visibility": "internal" + } + ], + "src": "4071:28:1" + }, + "returnParameters": { + "id": 159, + "nodeType": "ParameterList", + "parameters": [], + "src": "4108:0:1" + }, + "scope": 175, + "src": "4053:56:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 161, + "nodeType": "StructuredDocumentation", + "src": "4115:256:1", + "text": " @notice Mint tokens for `user`\n @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n @param gauge `LiquidityGauge` address to get mintable amount from\n @param user Address to mint to" + }, + "functionSelector": "27f18ae3", + "id": 168, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint_for", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 166, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 163, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "4394:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 162, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4394:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 165, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "4409:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 164, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4409:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4393:29:1" + }, + "returnParameters": { + "id": 167, + "nodeType": "ParameterList", + "parameters": [], + "src": "4431:0:1" + }, + "scope": 175, + "src": "4376:56:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 169, + "nodeType": "StructuredDocumentation", + "src": "4438:88:1", + "text": " @notice Toggle whether `minter` is approved to mint tokens for `user`" + }, + "functionSelector": "dd289d60", + "id": 174, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "toggle_approve_mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 171, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 174, + "src": "4560:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 170, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4560:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4559:16:1" + }, + "returnParameters": { + "id": 173, + "nodeType": "ParameterList", + "parameters": [], + "src": "4584:0:1" + }, + "scope": 175, + "src": "4531:54:1", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 176, + "src": "783:3804:1" + } + ], + "src": "688:3900:1" + }, + "id": 1 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol", + "exportedSymbols": { + "IBalancerToken": [ + 252 + ] + }, + "id": 253, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 177, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:2" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 178, + "nodeType": "ImportDirective", + "scope": 253, + "sourceUnit": 1651, + "src": "713:51:2", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 179, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "794:6:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 180, + "nodeType": "InheritanceSpecifier", + "src": "794:6:2" + } + ], + "contractDependencies": [ + 1650 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 252, + "linearizedBaseContracts": [ + 252, + 1650 + ], + "name": "IBalancerToken", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "40c10f19", + "id": 187, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 185, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 182, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 187, + "src": "821:10:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 181, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "821:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 184, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 187, + "src": "833:14:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "833:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "820:28:2" + }, + "returnParameters": { + "id": 186, + "nodeType": "ParameterList", + "parameters": [], + "src": "857:0:2" + }, + "scope": 252, + "src": "807:51:2", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "ca15c873", + "id": 194, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRoleMemberCount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 190, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 189, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 194, + "src": "892:12:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 188, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "892:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "891:14:2" + }, + "returnParameters": { + "id": 193, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 192, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 194, + "src": "929:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 191, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "929:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "928:9:2" + }, + "scope": 252, + "src": "864:74:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9010d07c", + "id": 203, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRoleMember", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 196, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 203, + "src": "967:12:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 195, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "967:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 198, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 203, + "src": "981:13:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "981:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "966:29:2" + }, + "returnParameters": { + "id": 202, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 201, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 203, + "src": "1019:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1019:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1018:9:2" + }, + "scope": 252, + "src": "944:84:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "91d14854", + "id": 212, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "hasRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 208, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 205, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1051:12:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 204, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1051:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 207, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1065:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1065:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1050:31:2" + }, + "returnParameters": { + "id": 211, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 210, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 212, + "src": "1105:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 209, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1105:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1104:6:2" + }, + "scope": 252, + "src": "1034:77:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "248a9ca3", + "id": 219, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRoleAdmin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 215, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 214, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 219, + "src": "1139:12:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 213, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1139:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1138:14:2" + }, + "returnParameters": { + "id": 218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 217, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 219, + "src": "1176:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 216, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1176:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1175:9:2" + }, + "scope": 252, + "src": "1117:68:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "2f2ff15d", + "id": 226, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "grantRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 224, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 221, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 226, + "src": "1210:12:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 220, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1210:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 223, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 226, + "src": "1224:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 222, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1224:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1209:31:2" + }, + "returnParameters": { + "id": 225, + "nodeType": "ParameterList", + "parameters": [], + "src": "1249:0:2" + }, + "scope": 252, + "src": "1191:59:2", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d547741f", + "id": 233, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "revokeRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 231, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 228, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1276:12:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 227, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1276:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 230, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 233, + "src": "1290:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 229, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1290:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1275:31:2" + }, + "returnParameters": { + "id": 232, + "nodeType": "ParameterList", + "parameters": [], + "src": "1315:0:2" + }, + "scope": 252, + "src": "1256:60:2", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "a217fddf", + "id": 238, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 234, + "nodeType": "ParameterList", + "parameters": [], + "src": "1402:2:2" + }, + "returnParameters": { + "id": 237, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 236, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 238, + "src": "1428:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 235, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1428:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1427:9:2" + }, + "scope": 252, + "src": "1375:62:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d5391393", + "id": 243, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "MINTER_ROLE", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 239, + "nodeType": "ParameterList", + "parameters": [], + "src": "1516:2:2" + }, + "returnParameters": { + "id": 242, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 241, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 243, + "src": "1542:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 240, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1542:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1541:9:2" + }, + "scope": 252, + "src": "1496:55:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "7028e2cd", + "id": 248, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "SNAPSHOT_ROLE", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 244, + "nodeType": "ParameterList", + "parameters": [], + "src": "1632:2:2" + }, + "returnParameters": { + "id": 247, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 246, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 248, + "src": "1658:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 245, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1658:7:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1657:9:2" + }, + "scope": 252, + "src": "1610:57:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9711715a", + "id": 251, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "snapshot", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 249, + "nodeType": "ParameterList", + "parameters": [], + "src": "1690:2:2" + }, + "returnParameters": { + "id": 250, + "nodeType": "ParameterList", + "parameters": [], + "src": "1701:0:2" + }, + "scope": 252, + "src": "1673:29:2", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 253, + "src": "766:938:2" + } + ], + "src": "688:1017:2" + }, + "id": 2 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "exportedSymbols": { + "IBalancerTokenAdmin": [ + 305 + ] + }, + "id": 306, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 254, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:3" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 255, + "nodeType": "ImportDirective", + "scope": 306, + "sourceUnit": 1521, + "src": "713:55:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol", + "file": "./IBalancerToken.sol", + "id": 256, + "nodeType": "ImportDirective", + "scope": 306, + "sourceUnit": 253, + "src": "770:30:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 257, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1520, + "src": "835:15:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1520", + "typeString": "contract IAuthentication" + } + }, + "id": 258, + "nodeType": "InheritanceSpecifier", + "src": "835:15:3" + } + ], + "contractDependencies": [ + 1520 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 305, + "linearizedBaseContracts": [ + 305, + 1520 + ], + "name": "IBalancerTokenAdmin", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "4dbac733", + "id": 263, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "INITIAL_RATE", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 259, + "nodeType": "ParameterList", + "parameters": [], + "src": "921:2:3" + }, + "returnParameters": { + "id": 262, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 261, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 263, + "src": "947:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "947:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "946:9:3" + }, + "scope": 305, + "src": "900:56:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "b87b5616", + "id": 268, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "RATE_REDUCTION_TIME", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 264, + "nodeType": "ParameterList", + "parameters": [], + "src": "990:2:3" + }, + "returnParameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 266, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 268, + "src": "1016:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 265, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1016:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1015:9:3" + }, + "scope": 305, + "src": "962:63:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "21609bbf", + "id": 273, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "RATE_REDUCTION_COEFFICIENT", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 269, + "nodeType": "ParameterList", + "parameters": [], + "src": "1066:2:3" + }, + "returnParameters": { + "id": 272, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 271, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 273, + "src": "1092:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 270, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1092:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1091:9:3" + }, + "scope": 305, + "src": "1031:70:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "7efad8e0", + "id": 278, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "RATE_DENOMINATOR", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 274, + "nodeType": "ParameterList", + "parameters": [], + "src": "1132:2:3" + }, + "returnParameters": { + "id": 277, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 276, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 278, + "src": "1158:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 275, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1158:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1157:9:3" + }, + "scope": 305, + "src": "1107:60:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 279, + "nodeType": "StructuredDocumentation", + "src": "1216:79:3", + "text": " @notice Returns the address of the Balancer Governance Token" + }, + "functionSelector": "c0039699", + "id": 284, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBalancerToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 280, + "nodeType": "ParameterList", + "parameters": [], + "src": "1325:2:3" + }, + "returnParameters": { + "id": 283, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 282, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 284, + "src": "1351:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + }, + "typeName": { + "id": 281, + "name": "IBalancerToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 252, + "src": "1351:14:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "visibility": "internal" + } + ], + "src": "1350:16:3" + }, + "scope": 305, + "src": "1300:67:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "0f15f4c0", + "id": 287, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "activate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 285, + "nodeType": "ParameterList", + "parameters": [], + "src": "1390:2:3" + }, + "returnParameters": { + "id": 286, + "nodeType": "ParameterList", + "parameters": [], + "src": "1401:0:3" + }, + "scope": 305, + "src": "1373:29:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "2c4e722e", + "id": 292, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "rate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 288, + "nodeType": "ParameterList", + "parameters": [], + "src": "1421:2:3" + }, + "returnParameters": { + "id": 291, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 290, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 292, + "src": "1447:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 289, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1447:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1446:9:3" + }, + "scope": 305, + "src": "1408:48:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "a228bced", + "id": 297, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "startEpochTimeWrite", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 293, + "nodeType": "ParameterList", + "parameters": [], + "src": "1490:2:3" + }, + "returnParameters": { + "id": 296, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 295, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 297, + "src": "1511:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 294, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1511:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1510:9:3" + }, + "scope": 305, + "src": "1462:58:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "40c10f19", + "id": 304, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 302, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 299, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 304, + "src": "1540:10:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 298, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1540:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 301, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 304, + "src": "1552:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 300, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1552:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1539:28:3" + }, + "returnParameters": { + "id": 303, + "nodeType": "ParameterList", + "parameters": [], + "src": "1576:0:3" + }, + "scope": 305, + "src": "1526:51:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 306, + "src": "802:777:3" + } + ], + "src": "688:892:3" + }, + "id": 3 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol", + "exportedSymbols": { + "IChildChainLiquidityGaugeFactory": [ + 375 + ] + }, + "id": 376, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 307, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:4" + }, + { + "id": 308, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:4" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol", + "file": "./IChildChainStreamer.sol", + "id": 309, + "nodeType": "ImportDirective", + "scope": 376, + "sourceUnit": 401, + "src": "747:35:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "file": "./ILiquidityGauge.sol", + "id": 310, + "nodeType": "ImportDirective", + "scope": 376, + "sourceUnit": 749, + "src": "783:31:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "file": "./ILiquidityGaugeFactory.sol", + "id": 311, + "nodeType": "ImportDirective", + "scope": 376, + "sourceUnit": 769, + "src": "815:38:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol", + "file": "./IRewardsOnlyGauge.sol", + "id": 312, + "nodeType": "ImportDirective", + "scope": 376, + "sourceUnit": 861, + "src": "854:33:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 313, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "935:22:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "id": 314, + "nodeType": "InheritanceSpecifier", + "src": "935:22:4" + } + ], + "contractDependencies": [ + 768 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 375, + "linearizedBaseContracts": [ + 375, + 768 + ], + "name": "IChildChainLiquidityGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "id": 322, + "name": "RewardsOnlyGaugeCreated", + "nodeType": "EventDefinition", + "parameters": { + "id": 321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 316, + "indexed": true, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 322, + "src": "994:21:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 315, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "994:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 318, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 322, + "src": "1017:20:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 317, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1017:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 320, + "indexed": false, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 322, + "src": "1039:16:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1039:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "993:63:4" + }, + "src": "964:93:4" + }, + { + "documentation": { + "id": 323, + "nodeType": "StructuredDocumentation", + "src": "1063:96:4", + "text": " @notice Returns the address of the implementation used for gauge deployments." + }, + "functionSelector": "39312dee", + "id": 328, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGaugeImplementation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 324, + "nodeType": "ParameterList", + "parameters": [], + "src": "1195:2:4" + }, + "returnParameters": { + "id": 327, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 326, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 328, + "src": "1221:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 325, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1221:15:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1220:17:4" + }, + "scope": 375, + "src": "1164:74:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 329, + "nodeType": "StructuredDocumentation", + "src": "1244:99:4", + "text": " @notice Returns the address of the implementation used for streamer deployments." + }, + "functionSelector": "f9e0a13e", + "id": 334, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getChildChainStreamerImplementation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 330, + "nodeType": "ParameterList", + "parameters": [], + "src": "1392:2:4" + }, + "returnParameters": { + "id": 333, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 332, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 334, + "src": "1418:19:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 331, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "1418:19:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "internal" + } + ], + "src": "1417:21:4" + }, + "scope": 375, + "src": "1348:91:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 335, + "nodeType": "StructuredDocumentation", + "src": "1445:80:4", + "text": " @notice Returns the address of the gauge belonging to `pool`." + }, + "functionSelector": "a8ea6875", + "id": 342, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 337, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 342, + "src": "1552:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 336, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1552:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1551:14:4" + }, + "returnParameters": { + "id": 341, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 340, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 342, + "src": "1589:15:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 339, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1589:15:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1588:17:4" + }, + "scope": 375, + "src": "1530:76:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 343, + "nodeType": "StructuredDocumentation", + "src": "1612:84:4", + "text": " @notice Returns the address of the streamer belonging to `gauge`." + }, + "functionSelector": "90b20087", + "id": 350, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGaugeStreamer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 346, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 345, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 350, + "src": "1727:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 344, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1727:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1726:15:4" + }, + "returnParameters": { + "id": 349, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 348, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 350, + "src": "1765:7:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 347, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1765:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1764:9:4" + }, + "scope": 375, + "src": "1701:73:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 351, + "nodeType": "StructuredDocumentation", + "src": "1780:82:4", + "text": " @notice Returns true if `streamer` was created by this factory." + }, + "functionSelector": "cbda9327", + "id": 358, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isStreamerFromFactory", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 354, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 353, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 358, + "src": "1898:16:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 352, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1898:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1897:18:4" + }, + "returnParameters": { + "id": 357, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 356, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 358, + "src": "1939:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 355, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1939:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1938:6:4" + }, + "scope": 375, + "src": "1867:78:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 359, + "nodeType": "StructuredDocumentation", + "src": "1951:81:4", + "text": " @notice Returns the address of the pool which `gauge` belongs." + }, + "functionSelector": "744a65dd", + "id": 366, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGaugePool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 362, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 361, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "2059:13:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 360, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2059:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2058:15:4" + }, + "returnParameters": { + "id": 365, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 364, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 366, + "src": "2097:6:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 363, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2097:6:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2096:8:4" + }, + "scope": 375, + "src": "2037:68:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 367, + "nodeType": "StructuredDocumentation", + "src": "2111:91:4", + "text": " @notice Returns the address of the streamer belonging to `pool`'s gauge." + }, + "functionSelector": "8a4ffeb0", + "id": 374, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolStreamer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 369, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 374, + "src": "2232:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 368, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2232:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2231:14:4" + }, + "returnParameters": { + "id": 373, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 372, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 374, + "src": "2269:7:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 371, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2269:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2268:9:4" + }, + "scope": 375, + "src": "2207:71:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 376, + "src": "889:1391:4" + } + ], + "src": "688:1593:4" + }, + "id": 4 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol", + "exportedSymbols": { + "IChildChainStreamer": [ + 400 + ] + }, + "id": 401, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 377, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:5" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 378, + "nodeType": "ImportDirective", + "scope": 401, + "sourceUnit": 1651, + "src": "713:51:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 400, + "linearizedBaseContracts": [ + 400 + ], + "name": "IChildChainStreamer", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "c4d66de8", + "id": 383, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 381, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 380, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 383, + "src": "1000:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 379, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1000:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "999:15:5" + }, + "returnParameters": { + "id": 382, + "nodeType": "ParameterList", + "parameters": [], + "src": "1023:0:5" + }, + "scope": 400, + "src": "980:44:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "54c49fe9", + "id": 390, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "reward_tokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 386, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 385, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 390, + "src": "1053:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1053:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1052:15:5" + }, + "returnParameters": { + "id": 389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 388, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 390, + "src": "1091:6:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 387, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1091:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1090:8:5" + }, + "scope": 400, + "src": "1030:69:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "661ab0b2", + "id": 399, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "add_reward", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 397, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 392, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "1134:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 391, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1134:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 394, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "1162:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 393, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1162:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 396, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 399, + "src": "1191:16:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 395, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1191:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1124:89:5" + }, + "returnParameters": { + "id": 398, + "nodeType": "ParameterList", + "parameters": [], + "src": "1222:0:5" + }, + "scope": 400, + "src": "1105:118:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 401, + "src": "944:281:5" + } + ], + "src": "688:538:5" + }, + "id": 5 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol", + "exportedSymbols": { + "IFeeDistributor": [ + 562 + ] + }, + "id": 563, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 402, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:6" + }, + { + "id": 403, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:6" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 404, + "nodeType": "ImportDirective", + "scope": 563, + "sourceUnit": 1651, + "src": "747:51:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol", + "file": "./IVotingEscrow.sol", + "id": 405, + "nodeType": "ImportDirective", + "scope": 563, + "sourceUnit": 1036, + "src": "800:29:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 406, + "nodeType": "StructuredDocumentation", + "src": "831:490:6", + "text": " @title Fee Distributor\n @notice Distributes any tokens transferred to the contract (e.g. Protocol fees and any BAL emissions) among veBAL\n holders proportionally based on a snapshot of the week at which the tokens are sent to the FeeDistributor contract.\n @dev Supports distributing arbitrarily many different tokens. In order to start distributing a new token to veBAL\n holders simply transfer the tokens to the `FeeDistributor` contract and then call `checkpointToken`." + }, + "fullyImplemented": false, + "id": 562, + "linearizedBaseContracts": [ + 562 + ], + "name": "IFeeDistributor", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "id": 414, + "name": "TokenCheckpointed", + "nodeType": "EventDefinition", + "parameters": { + "id": 413, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 408, + "indexed": false, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 414, + "src": "1378:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 407, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1378:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 410, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 414, + "src": "1392:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1392:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 412, + "indexed": false, + "mutability": "mutable", + "name": "lastCheckpointTimestamp", + "nodeType": "VariableDeclaration", + "scope": 414, + "src": "1408:31:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 411, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1408:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1377:63:6" + }, + "src": "1354:87:6" + }, + { + "anonymous": false, + "id": 424, + "name": "TokensClaimed", + "nodeType": "EventDefinition", + "parameters": { + "id": 423, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 416, + "indexed": false, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "1466:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 415, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1466:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 418, + "indexed": false, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "1480:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 417, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1480:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 420, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "1494:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 419, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1494:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 422, + "indexed": false, + "mutability": "mutable", + "name": "userTokenTimeCursor", + "nodeType": "VariableDeclaration", + "scope": 424, + "src": "1510:27:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1510:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1465:73:6" + }, + "src": "1446:93:6" + }, + { + "documentation": { + "id": 425, + "nodeType": "StructuredDocumentation", + "src": "1545:74:6", + "text": " @notice Returns the VotingEscrow (veBAL) token contract" + }, + "functionSelector": "08b0308a", + "id": 430, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVotingEscrow", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 426, + "nodeType": "ParameterList", + "parameters": [], + "src": "1648:2:6" + }, + "returnParameters": { + "id": 429, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 428, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 430, + "src": "1674:13:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + }, + "typeName": { + "id": 427, + "name": "IVotingEscrow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1035, + "src": "1674:13:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "visibility": "internal" + } + ], + "src": "1673:15:6" + }, + "scope": 562, + "src": "1624:65:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 431, + "nodeType": "StructuredDocumentation", + "src": "1695:109:6", + "text": " @notice Returns the global time cursor representing the most earliest uncheckpointed week." + }, + "functionSelector": "82aa5ad4", + "id": 436, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getTimeCursor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 432, + "nodeType": "ParameterList", + "parameters": [], + "src": "1831:2:6" + }, + "returnParameters": { + "id": 435, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 434, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 436, + "src": "1857:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 433, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1857:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1856:9:6" + }, + "scope": 562, + "src": "1809:57:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 437, + "nodeType": "StructuredDocumentation", + "src": "1872:168:6", + "text": " @notice Returns the user-level time cursor representing the most earliest uncheckpointed week.\n @param user - The address of the user to query." + }, + "functionSelector": "876e69a1", + "id": 444, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getUserTimeCursor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 440, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 439, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 444, + "src": "2072:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 438, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2072:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2071:14:6" + }, + "returnParameters": { + "id": 443, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 442, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 444, + "src": "2109:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 441, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2109:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2108:9:6" + }, + "scope": 562, + "src": "2045:73:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 445, + "nodeType": "StructuredDocumentation", + "src": "2124:185:6", + "text": " @notice Returns the token-level time cursor storing the timestamp at up to which tokens have been distributed.\n @param token - The ERC20 token address to query." + }, + "functionSelector": "acbc1428", + "id": 452, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getTokenTimeCursor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 448, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 447, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 452, + "src": "2342:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 446, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2342:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2341:14:6" + }, + "returnParameters": { + "id": 451, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 450, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 452, + "src": "2379:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 449, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2379:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2378:9:6" + }, + "scope": 562, + "src": "2314:74:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 453, + "nodeType": "StructuredDocumentation", + "src": "2394:236:6", + "text": " @notice Returns the user-level time cursor storing the timestamp of the latest token distribution claimed.\n @param user - The address of the user to query.\n @param token - The ERC20 token address to query." + }, + "functionSelector": "8050a7ee", + "id": 462, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getUserTokenTimeCursor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 458, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 455, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 462, + "src": "2667:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 454, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2667:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 457, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 462, + "src": "2681:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 456, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2681:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2666:28:6" + }, + "returnParameters": { + "id": 461, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 460, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 462, + "src": "2718:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 459, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2718:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2717:9:6" + }, + "scope": 562, + "src": "2635:92:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 463, + "nodeType": "StructuredDocumentation", + "src": "2733:479:6", + "text": " @notice Returns the user's cached balance of veBAL as of the provided timestamp.\n @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n This function requires `user` to have been checkpointed past `timestamp` so that their balance is cached.\n @param user - The address of the user of which to read the cached balance of.\n @param timestamp - The timestamp at which to read the `user`'s cached balance at." + }, + "functionSelector": "de681faf", + "id": 472, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getUserBalanceAtTimestamp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 468, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 465, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 472, + "src": "3252:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 464, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3252:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 467, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 472, + "src": "3266:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 466, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3266:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3251:33:6" + }, + "returnParameters": { + "id": 471, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 470, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 472, + "src": "3308:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 469, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3308:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3307:9:6" + }, + "scope": 562, + "src": "3217:100:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 473, + "nodeType": "StructuredDocumentation", + "src": "3323:391:6", + "text": " @notice Returns the cached total supply of veBAL as of the provided timestamp.\n @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n This function requires the contract to have been checkpointed past `timestamp` so that the supply is cached.\n @param timestamp - The timestamp at which to read the cached total supply at." + }, + "functionSelector": "4f3c5090", + "id": 480, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getTotalSupplyAtTimestamp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 476, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 475, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 480, + "src": "3754:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 474, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3754:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3753:19:6" + }, + "returnParameters": { + "id": 479, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 478, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 480, + "src": "3796:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 477, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3796:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3795:9:6" + }, + "scope": 562, + "src": "3719:86:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 481, + "nodeType": "StructuredDocumentation", + "src": "3811:82:6", + "text": " @notice Returns the FeeDistributor's cached balance of `token`." + }, + "functionSelector": "2308805b", + "id": 488, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getTokenLastBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 484, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 483, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 488, + "src": "3927:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 482, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "3927:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "3926:14:6" + }, + "returnParameters": { + "id": 487, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 486, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 488, + "src": "3964:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 485, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3964:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3963:9:6" + }, + "scope": 562, + "src": "3898:75:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 489, + "nodeType": "StructuredDocumentation", + "src": "3979:280:6", + "text": " @notice Returns the amount of `token` which the FeeDistributor received in the week beginning at `timestamp`.\n @param token - The ERC20 token address to query.\n @param timestamp - The timestamp corresponding to the beginning of the week of interest." + }, + "functionSelector": "d3dc4ca1", + "id": 498, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getTokensDistributedInWeek", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 494, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 491, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "4300:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 490, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "4300:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 493, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "4314:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 492, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4314:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4299:33:6" + }, + "returnParameters": { + "id": 497, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 496, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "4356:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 495, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4356:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4355:9:6" + }, + "scope": 562, + "src": "4264:101:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 499, + "nodeType": "StructuredDocumentation", + "src": "4390:623:6", + "text": " @notice Deposits tokens to be distributed in the current week.\n @dev Sending tokens directly to the FeeDistributor instead of using `depositTokens` may result in tokens being\n retroactively distributed to past weeks, or for the distribution to carry over to future weeks.\n If for some reason `depositTokens` cannot be called, in order to ensure that all tokens are correctly distributed\n manually call `checkpointToken` before and after the token transfer.\n @param token - The ERC20 token address to distribute.\n @param amount - The amount of tokens to deposit." + }, + "functionSelector": "338b5dea", + "id": 506, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "depositToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 501, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 506, + "src": "5040:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 500, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "5040:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 503, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 506, + "src": "5054:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 502, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5054:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5039:30:6" + }, + "returnParameters": { + "id": 505, + "nodeType": "ParameterList", + "parameters": [], + "src": "5078:0:6" + }, + "scope": 562, + "src": "5018:61:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 507, + "nodeType": "StructuredDocumentation", + "src": "5085:352:6", + "text": " @notice Deposits tokens to be distributed in the current week.\n @dev A version of `depositToken` which supports depositing multiple `tokens` at once.\n See `depositToken` for more details.\n @param tokens - An array of ERC20 token addresses to distribute.\n @param amounts - An array of token amounts to deposit." + }, + "functionSelector": "7b8d6221", + "id": 516, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "depositTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 514, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 510, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 516, + "src": "5465:24:6", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 508, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "5465:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 509, + "nodeType": "ArrayTypeName", + "src": "5465:8:6", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 513, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 516, + "src": "5491:26:6", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 511, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5491:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 512, + "nodeType": "ArrayTypeName", + "src": "5491:9:6", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5464:54:6" + }, + "returnParameters": { + "id": 515, + "nodeType": "ParameterList", + "parameters": [], + "src": "5527:0:6" + }, + "scope": 562, + "src": "5442:86:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 517, + "nodeType": "StructuredDocumentation", + "src": "5556:207:6", + "text": " @notice Caches the total supply of veBAL at the beginning of each week.\n This function will be called automatically before claiming tokens to ensure the contract is properly updated." + }, + "functionSelector": "c2c4c5c1", + "id": 520, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "checkpoint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 518, + "nodeType": "ParameterList", + "parameters": [], + "src": "5787:2:6" + }, + "returnParameters": { + "id": 519, + "nodeType": "ParameterList", + "parameters": [], + "src": "5798:0:6" + }, + "scope": 562, + "src": "5768:31:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 521, + "nodeType": "StructuredDocumentation", + "src": "5805:274:6", + "text": " @notice Caches the user's balance of veBAL at the beginning of each week.\n This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n @param user - The address of the user to be checkpointed." + }, + "functionSelector": "14866e08", + "id": 526, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "checkpointUser", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 524, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 523, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 526, + "src": "6108:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 522, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6108:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6107:14:6" + }, + "returnParameters": { + "id": 525, + "nodeType": "ParameterList", + "parameters": [], + "src": "6130:0:6" + }, + "scope": 562, + "src": "6084:47:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 527, + "nodeType": "StructuredDocumentation", + "src": "6137:509:6", + "text": " @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n @dev Any `token` balance held by the FeeDistributor above that which is returned by `getTokenLastBalance`\n will be distributed evenly across the time period since `token` was last checkpointed.\n This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n @param token - The ERC20 token address to be checkpointed." + }, + "functionSelector": "3902b9bc", + "id": 532, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "checkpointToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 530, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 529, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 532, + "src": "6676:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 528, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "6676:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "6675:14:6" + }, + "returnParameters": { + "id": 531, + "nodeType": "ParameterList", + "parameters": [], + "src": "6698:0:6" + }, + "scope": 562, + "src": "6651:48:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 533, + "nodeType": "StructuredDocumentation", + "src": "6705:325:6", + "text": " @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n @dev A version of `checkpointToken` which supports checkpointing multiple tokens.\n See `checkpointToken` for more details.\n @param tokens - An array of ERC20 token addresses to be checkpointed." + }, + "functionSelector": "905d10ac", + "id": 539, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "checkpointTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 537, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 536, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 539, + "src": "7061:24:6", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 534, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "7061:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 535, + "nodeType": "ArrayTypeName", + "src": "7061:8:6", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "7060:26:6" + }, + "returnParameters": { + "id": 538, + "nodeType": "ParameterList", + "parameters": [], + "src": "7095:0:6" + }, + "scope": 562, + "src": "7035:61:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 540, + "nodeType": "StructuredDocumentation", + "src": "7119:486:6", + "text": " @notice Claims all pending distributions of the provided token for a user.\n @dev It's not necessary to explicitly checkpoint before calling this function, it will ensure the FeeDistributor\n is up to date before calculating the amount of tokens to be claimed.\n @param user - The user on behalf of which to claim.\n @param token - The ERC20 token address to be claimed.\n @return The amount of `token` sent to `user` as a result of claiming." + }, + "functionSelector": "ca31879d", + "id": 549, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "claimToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 545, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 542, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 549, + "src": "7630:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 541, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7630:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 544, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 549, + "src": "7644:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 543, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "7644:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "7629:28:6" + }, + "returnParameters": { + "id": 548, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 547, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 549, + "src": "7676:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 546, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7676:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7675:9:6" + }, + "scope": 562, + "src": "7610:75:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 550, + "nodeType": "StructuredDocumentation", + "src": "7691:452:6", + "text": " @notice Claims a number of tokens on behalf of a user.\n @dev A version of `claimToken` which supports claiming multiple `tokens` on behalf of `user`.\n See `claimToken` for more details.\n @param user - The user on behalf of which to claim.\n @param tokens - An array of ERC20 token addresses to be claimed.\n @return An array of the amounts of each token in `tokens` sent to `user` as a result of claiming." + }, + "functionSelector": "88720467", + "id": 561, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "claimTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 556, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 552, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "8169:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 551, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8169:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 555, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "8183:24:6", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 553, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "8183:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 554, + "nodeType": "ArrayTypeName", + "src": "8183:8:6", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "8168:40:6" + }, + "returnParameters": { + "id": 560, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 559, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 561, + "src": "8227:16:6", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 557, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8227:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 558, + "nodeType": "ArrayTypeName", + "src": "8227:9:6", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "8226:18:6" + }, + "scope": 562, + "src": "8148:97:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 563, + "src": "1322:6925:6" + } + ], + "src": "688:7560:6" + }, + "id": 6 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol", + "exportedSymbols": { + "IGaugeAdder": [ + 652 + ] + }, + "id": 653, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 564, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:7" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "file": "./IAuthorizerAdaptor.sol", + "id": 565, + "nodeType": "ImportDirective", + "scope": 653, + "sourceUnit": 29, + "src": "713:34:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "file": "./IGaugeController.sol", + "id": 566, + "nodeType": "ImportDirective", + "scope": 653, + "sourceUnit": 721, + "src": "748:32:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "file": "./ILiquidityGauge.sol", + "id": 567, + "nodeType": "ImportDirective", + "scope": 653, + "sourceUnit": 749, + "src": "781:31:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "file": "./ILiquidityGaugeFactory.sol", + "id": 568, + "nodeType": "ImportDirective", + "scope": 653, + "sourceUnit": 769, + "src": "813:38:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol", + "file": "./IStakingLiquidityGauge.sol", + "id": 569, + "nodeType": "ImportDirective", + "scope": 653, + "sourceUnit": 956, + "src": "852:38:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 570, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1520, + "src": "917:15:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1520", + "typeString": "contract IAuthentication" + } + }, + "id": 571, + "nodeType": "InheritanceSpecifier", + "src": "917:15:7" + } + ], + "contractDependencies": [ + 1520 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 652, + "linearizedBaseContracts": [ + 652, + 1520 + ], + "name": "IGaugeAdder", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IGaugeAdder.GaugeType", + "id": 577, + "members": [ + { + "id": 572, + "name": "LiquidityMiningCommittee", + "nodeType": "EnumValue", + "src": "956:24:7" + }, + { + "id": 573, + "name": "veBAL", + "nodeType": "EnumValue", + "src": "982:5:7" + }, + { + "id": 574, + "name": "Ethereum", + "nodeType": "EnumValue", + "src": "989:8:7" + }, + { + "id": 575, + "name": "Polygon", + "nodeType": "EnumValue", + "src": "999:7:7" + }, + { + "id": 576, + "name": "Arbitrum", + "nodeType": "EnumValue", + "src": "1008:8:7" + } + ], + "name": "GaugeType", + "nodeType": "EnumDefinition", + "src": "939:79:7" + }, + { + "anonymous": false, + "id": 583, + "name": "GaugeFactoryAdded", + "nodeType": "EventDefinition", + "parameters": { + "id": 582, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 579, + "indexed": true, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 583, + "src": "1048:27:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 578, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "1048:9:7", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 581, + "indexed": false, + "mutability": "mutable", + "name": "gaugeFactory", + "nodeType": "VariableDeclaration", + "scope": 583, + "src": "1077:35:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + }, + "typeName": { + "id": 580, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "1077:22:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "visibility": "internal" + } + ], + "src": "1047:66:7" + }, + "src": "1024:90:7" + }, + { + "documentation": { + "id": 584, + "nodeType": "StructuredDocumentation", + "src": "1120:70:7", + "text": " @notice Returns the address of the Gauge Controller" + }, + "functionSelector": "58de9ade", + "id": 589, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGaugeController", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 585, + "nodeType": "ParameterList", + "parameters": [], + "src": "1222:2:7" + }, + "returnParameters": { + "id": 588, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 587, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 589, + "src": "1248:16:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 586, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "1248:16:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "internal" + } + ], + "src": "1247:18:7" + }, + "scope": 652, + "src": "1195:71:7", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 590, + "nodeType": "StructuredDocumentation", + "src": "1272:473:7", + "text": " @notice Returns the gauge corresponding to a Balancer pool `pool` on Ethereum mainnet.\n Only returns gauges which have been added to the Gauge Controller.\n @dev Gauge Factories also implement a `getPoolGauge` function which maps pools to gauges which it has deployed.\n This function provides global information by using which gauge has been added to the Gauge Controller\n to represent the canonical gauge for a given pool address." + }, + "functionSelector": "a8ea6875", + "id": 597, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 593, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 592, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 597, + "src": "1772:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 591, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1772:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1771:13:7" + }, + "returnParameters": { + "id": 596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 595, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 597, + "src": "1808:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 594, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1808:15:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1807:17:7" + }, + "scope": 652, + "src": "1750:75:7", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 598, + "nodeType": "StructuredDocumentation", + "src": "1831:84:7", + "text": " @notice Returns the `index`'th factory for gauge type `gaugeType`" + }, + "functionSelector": "52854ed7", + "id": 607, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getFactoryForGaugeType", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 603, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 600, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 607, + "src": "1952:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 599, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "1952:9:7", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 602, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 607, + "src": "1973:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 601, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1973:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1951:36:7" + }, + "returnParameters": { + "id": 606, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 605, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 607, + "src": "2011:7:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 604, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2011:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2010:9:7" + }, + "scope": 652, + "src": "1920:100:7", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 608, + "nodeType": "StructuredDocumentation", + "src": "2026:85:7", + "text": " @notice Returns the number of factories for gauge type `gaugeType`" + }, + "functionSelector": "f3d8b4cf", + "id": 615, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getFactoryForGaugeTypeCount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 611, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 610, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 615, + "src": "2153:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 609, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "2153:9:7", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + } + ], + "src": "2152:21:7" + }, + "returnParameters": { + "id": 614, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 613, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 615, + "src": "2197:7:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 612, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2197:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2196:9:7" + }, + "scope": 652, + "src": "2116:90:7", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 616, + "nodeType": "StructuredDocumentation", + "src": "2212:130:7", + "text": " @notice Returns whether `gauge` has been deployed by one of the listed factories for the gauge type `gaugeType`" + }, + "functionSelector": "abfca009", + "id": 625, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromValidFactory", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 621, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 618, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 625, + "src": "2380:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 617, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2380:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 620, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 625, + "src": "2395:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 619, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "2395:9:7", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + } + ], + "src": "2379:36:7" + }, + "returnParameters": { + "id": 624, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 623, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 625, + "src": "2439:4:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 622, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2439:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2438:6:7" + }, + "scope": 652, + "src": "2347:98:7", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 626, + "nodeType": "StructuredDocumentation", + "src": "2451:91:7", + "text": " @notice Adds a new gauge to the GaugeController for the \"Ethereum\" type." + }, + "functionSelector": "5e45a273", + "id": 631, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addEthereumGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 629, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 628, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 631, + "src": "2573:28:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + }, + "typeName": { + "id": 627, + "name": "IStakingLiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 955, + "src": "2573:22:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "2572:30:7" + }, + "returnParameters": { + "id": 630, + "nodeType": "ParameterList", + "parameters": [], + "src": "2611:0:7" + }, + "scope": 652, + "src": "2547:65:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 632, + "nodeType": "StructuredDocumentation", + "src": "2618:292:7", + "text": " @notice Adds a new gauge to the GaugeController for the \"Polygon\" type.\n This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n It should not be called with the address of the gauge which is deployed on Polygon" + }, + "functionSelector": "f87fcfa2", + "id": 637, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addPolygonGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 635, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 634, + "mutability": "mutable", + "name": "rootGauge", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "2940:17:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 633, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2940:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2939:19:7" + }, + "returnParameters": { + "id": 636, + "nodeType": "ParameterList", + "parameters": [], + "src": "2967:0:7" + }, + "scope": 652, + "src": "2915:53:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 638, + "nodeType": "StructuredDocumentation", + "src": "2974:294:7", + "text": " @notice Adds a new gauge to the GaugeController for the \"Arbitrum\" type.\n This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n It should not be called with the address of the gauge which is deployed on Arbitrum" + }, + "functionSelector": "bf2972d5", + "id": 643, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addArbitrumGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 641, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 640, + "mutability": "mutable", + "name": "rootGauge", + "nodeType": "VariableDeclaration", + "scope": 643, + "src": "3299:17:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 639, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3299:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3298:19:7" + }, + "returnParameters": { + "id": 642, + "nodeType": "ParameterList", + "parameters": [], + "src": "3326:0:7" + }, + "scope": 652, + "src": "3273:54:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 644, + "nodeType": "StructuredDocumentation", + "src": "3333:110:7", + "text": " @notice Adds `factory` as an allowlisted factory contract for gauges with type `gaugeType`." + }, + "functionSelector": "6440e973", + "id": 651, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addGaugeFactory", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 649, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 646, + "mutability": "mutable", + "name": "factory", + "nodeType": "VariableDeclaration", + "scope": 651, + "src": "3473:30:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + }, + "typeName": { + "id": 645, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "3473:22:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 648, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 651, + "src": "3505:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 647, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "3505:9:7", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + } + ], + "src": "3472:53:7" + }, + "returnParameters": { + "id": 650, + "nodeType": "ParameterList", + "parameters": [], + "src": "3534:0:7" + }, + "scope": 652, + "src": "3448:87:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 653, + "src": "892:2645:7" + } + ], + "src": "688:2850:7" + }, + "id": 7 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "exportedSymbols": { + "IGaugeController": [ + 720 + ] + }, + "id": 721, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 654, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:8" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 655, + "nodeType": "ImportDirective", + "scope": 721, + "sourceUnit": 1651, + "src": "713:51:8", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "file": "./IAuthorizerAdaptor.sol", + "id": 656, + "nodeType": "ImportDirective", + "scope": 721, + "sourceUnit": 29, + "src": "766:34:8", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol", + "file": "./IVotingEscrow.sol", + "id": 657, + "nodeType": "ImportDirective", + "scope": 721, + "sourceUnit": 1036, + "src": "801:29:8", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 720, + "linearizedBaseContracts": [ + 720 + ], + "name": "IGaugeController", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "615e5237", + "id": 662, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "checkpoint_gauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 660, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 659, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 662, + "src": "1069:13:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1069:7:8", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1068:15:8" + }, + "returnParameters": { + "id": 661, + "nodeType": "ParameterList", + "parameters": [], + "src": "1092:0:8" + }, + "scope": 720, + "src": "1043:50:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d3078c94", + "id": 671, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "gauge_relative_weight", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 667, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 664, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 671, + "src": "1130:13:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 663, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1130:7:8", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 666, + "mutability": "mutable", + "name": "time", + "nodeType": "VariableDeclaration", + "scope": 671, + "src": "1145:12:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 665, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1145:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1129:29:8" + }, + "returnParameters": { + "id": 670, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 669, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 671, + "src": "1177:7:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 668, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1177:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1176:9:8" + }, + "scope": 720, + "src": "1099:87:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "dfe05031", + "id": 676, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "voting_escrow", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 672, + "nodeType": "ParameterList", + "parameters": [], + "src": "1214:2:8" + }, + "returnParameters": { + "id": 675, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 674, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 676, + "src": "1240:13:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + }, + "typeName": { + "id": 673, + "name": "IVotingEscrow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1035, + "src": "1240:13:8", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "visibility": "internal" + } + ], + "src": "1239:15:8" + }, + "scope": 720, + "src": "1192:63:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "fc0c546a", + "id": 681, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "token", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 677, + "nodeType": "ParameterList", + "parameters": [], + "src": "1275:2:8" + }, + "returnParameters": { + "id": 680, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 679, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 681, + "src": "1301:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 678, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1301:6:8", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1300:8:8" + }, + "scope": 720, + "src": "1261:48:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "92d0d232", + "id": 688, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "add_type", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 686, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 683, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 688, + "src": "1333:20:8", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string" + }, + "typeName": { + "id": 682, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1333:6:8", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 685, + "mutability": "mutable", + "name": "weight", + "nodeType": "VariableDeclaration", + "scope": 688, + "src": "1355:14:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 684, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1355:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1332:38:8" + }, + "returnParameters": { + "id": 687, + "nodeType": "ParameterList", + "parameters": [], + "src": "1379:0:8" + }, + "scope": 720, + "src": "1315:65:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "db1ca260", + "id": 695, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "change_type_weight", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 693, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 690, + "mutability": "mutable", + "name": "typeId", + "nodeType": "VariableDeclaration", + "scope": 695, + "src": "1414:13:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 689, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1414:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 692, + "mutability": "mutable", + "name": "weight", + "nodeType": "VariableDeclaration", + "scope": 695, + "src": "1429:14:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 691, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1429:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1413:31:8" + }, + "returnParameters": { + "id": 694, + "nodeType": "ParameterList", + "parameters": [], + "src": "1453:0:8" + }, + "scope": 720, + "src": "1386:68:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "3a04f900", + "id": 702, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "add_gauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 700, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 697, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 702, + "src": "1572:13:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1572:7:8", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 699, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 702, + "src": "1587:16:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 698, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1587:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + } + ], + "src": "1571:33:8" + }, + "returnParameters": { + "id": 701, + "nodeType": "ParameterList", + "parameters": [], + "src": "1613:0:8" + }, + "scope": 720, + "src": "1553:61:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9fba03a1", + "id": 707, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "n_gauge_types", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 703, + "nodeType": "ParameterList", + "parameters": [], + "src": "1642:2:8" + }, + "returnParameters": { + "id": 706, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 705, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 707, + "src": "1668:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 704, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1668:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + } + ], + "src": "1667:8:8" + }, + "scope": 720, + "src": "1620:56:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "3f9095b7", + "id": 714, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "gauge_types", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 710, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 709, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 714, + "src": "1703:13:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 708, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1703:7:8", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1702:15:8" + }, + "returnParameters": { + "id": 713, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 712, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 714, + "src": "1741:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 711, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1741:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + } + ], + "src": "1740:8:8" + }, + "scope": 720, + "src": "1682:67:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "f851a440", + "id": 719, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "admin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 715, + "nodeType": "ParameterList", + "parameters": [], + "src": "1769:2:8" + }, + "returnParameters": { + "id": 718, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 717, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 719, + "src": "1795:18:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 716, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1795:18:8", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "1794:20:8" + }, + "scope": 720, + "src": "1755:60:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 721, + "src": "1010:807:8" + } + ], + "src": "688:1130:8" + }, + "id": 8 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "exportedSymbols": { + "ILiquidityGauge": [ + 748 + ] + }, + "id": 749, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 722, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:9" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 748, + "linearizedBaseContracts": [ + 748 + ], + "name": "ILiquidityGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "09400707", + "id": 729, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "integrate_fraction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 725, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 724, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 729, + "src": "951:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 723, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "951:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "950:14:9" + }, + "returnParameters": { + "id": 728, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 727, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 729, + "src": "988:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 726, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "988:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "987:9:9" + }, + "scope": 748, + "src": "923:74:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "4b820093", + "id": 736, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "user_checkpoint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 731, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 736, + "src": "1028:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 730, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1028:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1027:14:9" + }, + "returnParameters": { + "id": 735, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 734, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 736, + "src": "1060:4:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 733, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1060:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1059:6:9" + }, + "scope": 748, + "src": "1003:63:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9c868ac0", + "id": 741, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "is_killed", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 737, + "nodeType": "ParameterList", + "parameters": [], + "src": "1090:2:9" + }, + "returnParameters": { + "id": 740, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 739, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 741, + "src": "1116:4:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 738, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1116:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1115:6:9" + }, + "scope": 748, + "src": "1072:50:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "ab8f0945", + "id": 744, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "killGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 742, + "nodeType": "ParameterList", + "parameters": [], + "src": "1146:2:9" + }, + "returnParameters": { + "id": 743, + "nodeType": "ParameterList", + "parameters": [], + "src": "1157:0:9" + }, + "scope": 748, + "src": "1128:30:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d34fb267", + "id": 747, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unkillGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 745, + "nodeType": "ParameterList", + "parameters": [], + "src": "1184:2:9" + }, + "returnParameters": { + "id": 746, + "nodeType": "ParameterList", + "parameters": [], + "src": "1195:0:9" + }, + "scope": 748, + "src": "1164:32:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 749, + "src": "891:307:9" + } + ], + "src": "688:511:9" + }, + "id": 9 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "exportedSymbols": { + "ILiquidityGaugeFactory": [ + 768 + ] + }, + "id": 769, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 750, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:10" + }, + { + "id": 751, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:10" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "file": "./ILiquidityGauge.sol", + "id": 752, + "nodeType": "ImportDirective", + "scope": 769, + "sourceUnit": 749, + "src": "747:31:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 768, + "linearizedBaseContracts": [ + 768 + ], + "name": "ILiquidityGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 753, + "nodeType": "StructuredDocumentation", + "src": "819:79:10", + "text": " @notice Returns true if `gauge` was created by this factory." + }, + "functionSelector": "ce3cc8bd", + "id": 760, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromFactory", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 756, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 755, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 760, + "src": "931:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 754, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "931:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "930:15:10" + }, + "returnParameters": { + "id": 759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 758, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 760, + "src": "969:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 757, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "969:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "968:6:10" + }, + "scope": 768, + "src": "903:72:10", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "9ed93318", + "id": 767, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 763, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 762, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 767, + "src": "997:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 761, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "997:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "996:14:10" + }, + "returnParameters": { + "id": 766, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 765, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 767, + "src": "1029:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 764, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1029:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1028:9:10" + }, + "scope": 768, + "src": "981:57:10", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 769, + "src": "780:260:10" + } + ], + "src": "688:353:10" + }, + "id": 10 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol", + "exportedSymbols": { + "IRewardTokenDistributor": [ + 826 + ] + }, + "id": 827, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 770, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:11" + }, + { + "id": 771, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:11" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 772, + "nodeType": "ImportDirective", + "scope": 827, + "sourceUnit": 1651, + "src": "747:51:11", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 826, + "linearizedBaseContracts": [ + 826 + ], + "name": "IRewardTokenDistributor", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IRewardTokenDistributor.Reward", + "id": 785, + "members": [ + { + "constant": false, + "id": 774, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 785, + "src": "1062:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 773, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1062:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 776, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 785, + "src": "1084:19:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 775, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1084:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 778, + "mutability": "mutable", + "name": "period_finish", + "nodeType": "VariableDeclaration", + "scope": 785, + "src": "1113:21:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 777, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1113:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 780, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 785, + "src": "1144:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 779, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1144:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 782, + "mutability": "mutable", + "name": "last_update", + "nodeType": "VariableDeclaration", + "scope": 785, + "src": "1166:19:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 781, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1166:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 784, + "mutability": "mutable", + "name": "integral", + "nodeType": "VariableDeclaration", + "scope": 785, + "src": "1195:16:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 783, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1195:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Reward", + "nodeType": "StructDefinition", + "scope": 826, + "src": "1038:180:11", + "visibility": "public" + }, + { + "functionSelector": "54c49fe9", + "id": 792, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "reward_tokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 787, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 792, + "src": "1247:13:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 786, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1247:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1246:15:11" + }, + "returnParameters": { + "id": 791, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 790, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 792, + "src": "1285:6:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 789, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1285:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1284:8:11" + }, + "scope": 826, + "src": "1224:69:11", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "48e9c65e", + "id": 799, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "reward_data", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 795, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 794, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 799, + "src": "1320:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 793, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1320:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1319:14:11" + }, + "returnParameters": { + "id": 798, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 797, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 799, + "src": "1357:13:11", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_memory_ptr", + "typeString": "struct IRewardTokenDistributor.Reward" + }, + "typeName": { + "id": 796, + "name": "Reward", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 785, + "src": "1357:6:11", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage_ptr", + "typeString": "struct IRewardTokenDistributor.Reward" + } + }, + "visibility": "internal" + } + ], + "src": "1356:15:11" + }, + "scope": 826, + "src": "1299:73:11", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "84e9bd7e", + "id": 804, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "claim_rewards", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 802, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 801, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 804, + "src": "1401:12:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 800, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1401:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1400:14:11" + }, + "returnParameters": { + "id": 803, + "nodeType": "ParameterList", + "parameters": [], + "src": "1423:0:11" + }, + "scope": 826, + "src": "1378:46:11", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "e8de0d4d", + "id": 811, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "add_reward", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 809, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 806, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 811, + "src": "1450:18:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 805, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1450:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 808, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 811, + "src": "1470:19:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 807, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1470:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1449:41:11" + }, + "returnParameters": { + "id": 810, + "nodeType": "ParameterList", + "parameters": [], + "src": "1499:0:11" + }, + "scope": 826, + "src": "1430:70:11", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "058a3a24", + "id": 818, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "set_reward_distributor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 816, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 813, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 818, + "src": "1538:18:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 812, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1538:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 815, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 818, + "src": "1558:19:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 814, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1558:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1537:41:11" + }, + "returnParameters": { + "id": 817, + "nodeType": "ParameterList", + "parameters": [], + "src": "1587:0:11" + }, + "scope": 826, + "src": "1506:82:11", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "93f7aa67", + "id": 825, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deposit_reward_token", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 823, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 820, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 825, + "src": "1624:18:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 819, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1624:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 822, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 825, + "src": "1644:14:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 821, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1644:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1623:36:11" + }, + "returnParameters": { + "id": 824, + "nodeType": "ParameterList", + "parameters": [], + "src": "1668:0:11" + }, + "scope": 826, + "src": "1594:75:11", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 827, + "src": "998:673:11" + } + ], + "src": "688:984:11" + }, + "id": 11 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol", + "exportedSymbols": { + "IRewardsOnlyGauge": [ + 860 + ] + }, + "id": 861, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 828, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:12" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol", + "file": "./IChildChainStreamer.sol", + "id": 829, + "nodeType": "ImportDirective", + "scope": 861, + "sourceUnit": 401, + "src": "713:35:12", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 860, + "linearizedBaseContracts": [ + 860 + ], + "name": "IRewardsOnlyGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "6133f985", + "id": 838, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 836, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 831, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 838, + "src": "991:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 830, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "991:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 833, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 838, + "src": "1013:16:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 832, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1013:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 835, + "mutability": "mutable", + "name": "claimSignature", + "nodeType": "VariableDeclaration", + "scope": 838, + "src": "1039:22:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 834, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1039:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "981:86:12" + }, + "returnParameters": { + "id": 837, + "nodeType": "ParameterList", + "parameters": [], + "src": "1076:0:12" + }, + "scope": 860, + "src": "962:115:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "82c63066", + "id": 843, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "lp_token", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 839, + "nodeType": "ParameterList", + "parameters": [], + "src": "1153:2:12" + }, + "returnParameters": { + "id": 842, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 841, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 843, + "src": "1179:6:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 840, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1179:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1178:8:12" + }, + "scope": 860, + "src": "1136:51:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "bf88a6ff", + "id": 848, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "reward_contract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 844, + "nodeType": "ParameterList", + "parameters": [], + "src": "1217:2:12" + }, + "returnParameters": { + "id": 847, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 846, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 848, + "src": "1243:19:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 845, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "1243:19:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "internal" + } + ], + "src": "1242:21:12" + }, + "scope": 860, + "src": "1193:71:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "47d2d5d3", + "id": 859, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "set_rewards", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 857, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 850, + "mutability": "mutable", + "name": "childChainStreamer", + "nodeType": "VariableDeclaration", + "scope": 859, + "src": "1300:26:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 849, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1300:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 852, + "mutability": "mutable", + "name": "claimSig", + "nodeType": "VariableDeclaration", + "scope": 859, + "src": "1336:16:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 851, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1336:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 856, + "mutability": "mutable", + "name": "rewardTokens", + "nodeType": "VariableDeclaration", + "scope": 859, + "src": "1362:32:12", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_calldata_ptr", + "typeString": "address[8]" + }, + "typeName": { + "baseType": { + "id": 853, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1362:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 855, + "length": { + "hexValue": "38", + "id": 854, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1370:1:12", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "1362:10:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_storage_ptr", + "typeString": "address[8]" + } + }, + "visibility": "internal" + } + ], + "src": "1290:110:12" + }, + "returnParameters": { + "id": 858, + "nodeType": "ParameterList", + "parameters": [], + "src": "1409:0:12" + }, + "scope": 860, + "src": "1270:140:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 861, + "src": "928:484:12" + } + ], + "src": "688:725:12" + }, + "id": 12 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "exportedSymbols": { + "ISingleRecipientGauge": [ + 876 + ] + }, + "id": 877, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 862, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:13" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol", + "file": "./IStakelessGauge.sol", + "id": 863, + "nodeType": "ImportDirective", + "scope": 877, + "sourceUnit": 921, + "src": "713:31:13", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 864, + "name": "IStakelessGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 920, + "src": "781:15:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakelessGauge_$920", + "typeString": "contract IStakelessGauge" + } + }, + "id": 865, + "nodeType": "InheritanceSpecifier", + "src": "781:15:13" + } + ], + "contractDependencies": [ + 748, + 920 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 876, + "linearizedBaseContracts": [ + 876, + 920, + 748 + ], + "name": "ISingleRecipientGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "c4d66de8", + "id": 870, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 868, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 867, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 870, + "src": "823:17:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 866, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "823:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "822:19:13" + }, + "returnParameters": { + "id": 869, + "nodeType": "ParameterList", + "parameters": [], + "src": "850:0:13" + }, + "scope": 876, + "src": "803:48:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "1b88094d", + "id": 875, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRecipient", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 871, + "nodeType": "ParameterList", + "parameters": [], + "src": "878:2:13" + }, + "returnParameters": { + "id": 874, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 873, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 875, + "src": "904:7:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 872, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "904:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "903:9:13" + }, + "scope": 876, + "src": "857:56:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 877, + "src": "746:169:13" + } + ], + "src": "688:228:13" + }, + "id": 13 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol", + "exportedSymbols": { + "ISingleRecipientGaugeFactory": [ + 899 + ] + }, + "id": 900, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 878, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:14" + }, + { + "id": 879, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:14" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "file": "./ILiquidityGaugeFactory.sol", + "id": 880, + "nodeType": "ImportDirective", + "scope": 900, + "sourceUnit": 769, + "src": "747:38:14", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 881, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "829:22:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "id": 882, + "nodeType": "InheritanceSpecifier", + "src": "829:22:14" + } + ], + "contractDependencies": [ + 768 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 899, + "linearizedBaseContracts": [ + 899, + 768 + ], + "name": "ISingleRecipientGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 883, + "nodeType": "StructuredDocumentation", + "src": "858:78:14", + "text": " @notice Returns the gauge which sends funds to `recipient`." + }, + "functionSelector": "7d5d0d10", + "id": 890, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRecipientGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 886, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 885, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 890, + "src": "968:17:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 884, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "968:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "967:19:14" + }, + "returnParameters": { + "id": 889, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 888, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 890, + "src": "1010:15:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 887, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1010:15:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1009:17:14" + }, + "scope": 899, + "src": "941:86:14", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 891, + "nodeType": "StructuredDocumentation", + "src": "1033:60:14", + "text": " @notice Returns the recipient of `gauge`." + }, + "functionSelector": "fa72ce95", + "id": 898, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGaugeRecipient", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 894, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 893, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 898, + "src": "1125:13:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 892, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1125:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1124:15:14" + }, + "returnParameters": { + "id": 897, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 896, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 898, + "src": "1163:7:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 895, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1163:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1162:9:14" + }, + "scope": 899, + "src": "1098:74:14", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 900, + "src": "787:387:14" + } + ], + "src": "688:487:14" + }, + "id": 14 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol", + "exportedSymbols": { + "ISmartWalletChecker": [ + 909 + ] + }, + "id": 910, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 901, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:15" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 909, + "linearizedBaseContracts": [ + 909 + ], + "name": "ISmartWalletChecker", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "c23697a8", + "id": 908, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "check", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 904, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 903, + "mutability": "mutable", + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 908, + "src": "764:23:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 902, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "764:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "763:25:15" + }, + "returnParameters": { + "id": 907, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 906, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 908, + "src": "812:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 905, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "812:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "811:6:15" + }, + "scope": 909, + "src": "749:69:15", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 910, + "src": "713:107:15" + } + ], + "src": "688:133:15" + }, + "id": 15 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol", + "exportedSymbols": { + "IStakelessGauge": [ + 920 + ] + }, + "id": 921, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 911, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:16" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "file": "./ILiquidityGauge.sol", + "id": 912, + "nodeType": "ImportDirective", + "scope": 921, + "sourceUnit": 749, + "src": "713:31:16", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 913, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "775:15:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "id": 914, + "nodeType": "InheritanceSpecifier", + "src": "775:15:16" + } + ], + "contractDependencies": [ + 748 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 920, + "linearizedBaseContracts": [ + 920, + 748 + ], + "name": "IStakelessGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "c2c4c5c1", + "id": 919, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "checkpoint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 915, + "nodeType": "ParameterList", + "parameters": [], + "src": "816:2:16" + }, + "returnParameters": { + "id": 918, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 917, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 919, + "src": "845:4:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 916, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "845:4:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "844:6:16" + }, + "scope": 920, + "src": "797:54:16", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 921, + "src": "746:107:16" + } + ], + "src": "688:166:16" + }, + "id": 16 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol", + "exportedSymbols": { + "IStakingLiquidityGauge": [ + 955 + ] + }, + "id": 956, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 922, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:17" + }, + { + "id": 923, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:17" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 924, + "nodeType": "ImportDirective", + "scope": 956, + "sourceUnit": 1651, + "src": "747:51:17", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "file": "./ILiquidityGauge.sol", + "id": 925, + "nodeType": "ImportDirective", + "scope": 956, + "sourceUnit": 749, + "src": "800:31:17", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol", + "file": "./IRewardTokenDistributor.sol", + "id": 926, + "nodeType": "ImportDirective", + "scope": 956, + "sourceUnit": 827, + "src": "832:39:17", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 927, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "1107:23:17", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "id": 928, + "nodeType": "InheritanceSpecifier", + "src": "1107:23:17" + }, + { + "baseName": { + "id": 929, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1132:15:17", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "id": 930, + "nodeType": "InheritanceSpecifier", + "src": "1132:15:17" + }, + { + "baseName": { + "id": 931, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1149:6:17", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 932, + "nodeType": "InheritanceSpecifier", + "src": "1149:6:17" + } + ], + "contractDependencies": [ + 748, + 826, + 1650 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 955, + "linearizedBaseContracts": [ + 955, + 1650, + 748, + 826 + ], + "name": "IStakingLiquidityGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "c4d66de8", + "id": 937, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 935, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 934, + "mutability": "mutable", + "name": "lpToken", + "nodeType": "VariableDeclaration", + "scope": 937, + "src": "1182:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 933, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1182:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1181:17:17" + }, + "returnParameters": { + "id": 936, + "nodeType": "ParameterList", + "parameters": [], + "src": "1207:0:17" + }, + "scope": 955, + "src": "1162:46:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "82c63066", + "id": 942, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "lp_token", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 938, + "nodeType": "ParameterList", + "parameters": [], + "src": "1231:2:17" + }, + "returnParameters": { + "id": 941, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 940, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 942, + "src": "1257:6:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 939, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1257:6:17", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1256:8:17" + }, + "scope": 955, + "src": "1214:51:17", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "6e553f65", + "id": 949, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 947, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 944, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 949, + "src": "1288:13:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 943, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1288:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 946, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 949, + "src": "1303:17:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 945, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1303:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1287:34:17" + }, + "returnParameters": { + "id": 948, + "nodeType": "ParameterList", + "parameters": [], + "src": "1330:0:17" + }, + "scope": 955, + "src": "1271:60:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "2e1a7d4d", + "id": 954, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 952, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 951, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 954, + "src": "1355:13:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 950, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1355:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1354:15:17" + }, + "returnParameters": { + "id": 953, + "nodeType": "ParameterList", + "parameters": [], + "src": "1378:0:17" + }, + "scope": 955, + "src": "1337:42:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 956, + "src": "1071:310:17" + } + ], + "src": "688:694:17" + }, + "id": 17 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol", + "exportedSymbols": { + "IVeDelegation": [ + 965 + ] + }, + "id": 966, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 957, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:18" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 965, + "linearizedBaseContracts": [ + 965 + ], + "name": "IVeDelegation", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "bbf7408a", + "id": 964, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "adjusted_balance_of", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 960, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 959, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 964, + "src": "1003:12:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 958, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1003:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1002:14:18" + }, + "returnParameters": { + "id": 963, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 962, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 964, + "src": "1040:7:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 961, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1040:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1039:9:18" + }, + "scope": 965, + "src": "974:75:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 966, + "src": "891:160:18" + } + ], + "src": "688:364:18" + }, + "id": 18 + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol", + "exportedSymbols": { + "IVotingEscrow": [ + 1035 + ] + }, + "id": 1036, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 967, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:19" + }, + { + "id": 968, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:19" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "file": "./IAuthorizerAdaptor.sol", + "id": 969, + "nodeType": "ImportDirective", + "scope": 1036, + "sourceUnit": 29, + "src": "747:34:19", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1035, + "linearizedBaseContracts": [ + 1035 + ], + "name": "IVotingEscrow", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IVotingEscrow.Point", + "id": 978, + "members": [ + { + "constant": false, + "id": 971, + "mutability": "mutable", + "name": "bias", + "nodeType": "VariableDeclaration", + "scope": 978, + "src": "1014:11:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 970, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1014:6:19", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 973, + "mutability": "mutable", + "name": "slope", + "nodeType": "VariableDeclaration", + "scope": 978, + "src": "1035:12:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 972, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1035:6:19", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 975, + "mutability": "mutable", + "name": "ts", + "nodeType": "VariableDeclaration", + "scope": 978, + "src": "1075:10:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 974, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1075:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 977, + "mutability": "mutable", + "name": "blk", + "nodeType": "VariableDeclaration", + "scope": 978, + "src": "1095:11:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 976, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1095:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Point", + "nodeType": "StructDefinition", + "scope": 1035, + "src": "991:131:19", + "visibility": "public" + }, + { + "functionSelector": "900cf0cf", + "id": 983, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "epoch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 979, + "nodeType": "ParameterList", + "parameters": [], + "src": "1142:2:19" + }, + "returnParameters": { + "id": 982, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 981, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 983, + "src": "1168:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 980, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1168:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1167:9:19" + }, + "scope": 1035, + "src": "1128:49:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "bd85b039", + "id": 990, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 986, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 985, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 990, + "src": "1204:17:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 984, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1204:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1203:19:19" + }, + "returnParameters": { + "id": 989, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 988, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 990, + "src": "1246:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 987, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1246:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1245:9:19" + }, + "scope": 1035, + "src": "1183:72:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "010ae757", + "id": 997, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "user_point_epoch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 993, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 992, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 997, + "src": "1287:12:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 991, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1287:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1286:14:19" + }, + "returnParameters": { + "id": 996, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 995, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 997, + "src": "1324:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 994, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1324:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1323:9:19" + }, + "scope": 1035, + "src": "1261:72:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d1febfb9", + "id": 1004, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "point_history", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1000, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 999, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 1004, + "src": "1362:17:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 998, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1362:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1361:19:19" + }, + "returnParameters": { + "id": 1003, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1002, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1004, + "src": "1404:12:19", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point" + }, + "typeName": { + "id": 1001, + "name": "Point", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 978, + "src": "1404:5:19", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_storage_ptr", + "typeString": "struct IVotingEscrow.Point" + } + }, + "visibility": "internal" + } + ], + "src": "1403:14:19" + }, + "scope": 1035, + "src": "1339:79:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "28d09d47", + "id": 1013, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "user_point_history", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1009, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1006, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1013, + "src": "1452:12:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1005, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1452:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1008, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 1013, + "src": "1466:17:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1007, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1466:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1451:33:19" + }, + "returnParameters": { + "id": 1012, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1011, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1013, + "src": "1508:12:19", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point" + }, + "typeName": { + "id": 1010, + "name": "Point", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 978, + "src": "1508:5:19", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_storage_ptr", + "typeString": "struct IVotingEscrow.Point" + } + }, + "visibility": "internal" + } + ], + "src": "1507:14:19" + }, + "scope": 1035, + "src": "1424:98:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c2c4c5c1", + "id": 1016, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "checkpoint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1014, + "nodeType": "ParameterList", + "parameters": [], + "src": "1547:2:19" + }, + "returnParameters": { + "id": 1015, + "nodeType": "ParameterList", + "parameters": [], + "src": "1558:0:19" + }, + "scope": 1035, + "src": "1528:31:19", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "f851a440", + "id": 1021, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "admin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1017, + "nodeType": "ParameterList", + "parameters": [], + "src": "1579:2:19" + }, + "returnParameters": { + "id": 1020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1019, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "1605:18:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 1018, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1605:18:19", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "1604:20:19" + }, + "scope": 1035, + "src": "1565:60:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "7175d4f7", + "id": 1026, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "smart_wallet_checker", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1022, + "nodeType": "ParameterList", + "parameters": [], + "src": "1660:2:19" + }, + "returnParameters": { + "id": 1025, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1024, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1026, + "src": "1686:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1023, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1686:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1685:9:19" + }, + "scope": 1035, + "src": "1631:64:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "57f901e2", + "id": 1031, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "commit_smart_wallet_checker", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1029, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1028, + "mutability": "mutable", + "name": "newSmartWalletChecker", + "nodeType": "VariableDeclaration", + "scope": 1031, + "src": "1738:29:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1027, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1738:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1737:31:19" + }, + "returnParameters": { + "id": 1030, + "nodeType": "ParameterList", + "parameters": [], + "src": "1777:0:19" + }, + "scope": 1035, + "src": "1701:77:19", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "8e5b490f", + "id": 1034, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "apply_smart_wallet_checker", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1032, + "nodeType": "ParameterList", + "parameters": [], + "src": "1819:2:19" + }, + "returnParameters": { + "id": 1033, + "nodeType": "ParameterList", + "parameters": [], + "src": "1830:0:19" + }, + "scope": 1035, + "src": "1784:47:19", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1036, + "src": "961:872:19" + } + ], + "src": "688:1146:19" + }, + "id": 19 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "exportedSymbols": { + "Errors": [ + 1509 + ], + "_require": [ + 1053 + ], + "_revert": [ + 1061 + ] + }, + "id": 1510, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1037, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:20" + }, + { + "body": { + "id": 1052, + "nodeType": "Block", + "src": "924:43:20", + "statements": [ + { + "condition": { + "id": 1046, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "934:10:20", + "subExpression": { + "id": 1045, + "name": "condition", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1040, + "src": "935:9:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1051, + "nodeType": "IfStatement", + "src": "930:34:20", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 1048, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1042, + "src": "954:9:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1047, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1061, + "src": "946:7:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 1049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "946:18:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1050, + "nodeType": "ExpressionStatement", + "src": "946:18:20" + } + } + ] + }, + "documentation": { + "id": 1038, + "nodeType": "StructuredDocumentation", + "src": "733:132:20", + "text": " @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n supported." + }, + "id": 1053, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_require", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1043, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1040, + "mutability": "mutable", + "name": "condition", + "nodeType": "VariableDeclaration", + "scope": 1053, + "src": "884:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1039, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "884:4:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1042, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 1053, + "src": "900:17:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1041, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "900:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "883:35:20" + }, + "returnParameters": { + "id": 1044, + "nodeType": "ParameterList", + "parameters": [], + "src": "924:0:20" + }, + "scope": 1510, + "src": "866:101:20", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 1060, + "nodeType": "Block", + "src": "1115:3131:20", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "1904:2340:20", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2178:42:20", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2199:9:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2210:2:20", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mod", + "nodeType": "YulIdentifier", + "src": "2195:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2195:18:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2215:4:20", + "type": "", + "value": "0x30" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2191:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2191:29:20" + }, + "variables": [ + { + "name": "units", + "nodeType": "YulTypedName", + "src": "2182:5:20", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2230:31:20", + "value": { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2247:9:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2258:2:20", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "2243:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2243:18:20" + }, + "variableNames": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2230:9:20" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2270:43:20", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2292:9:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2303:2:20", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mod", + "nodeType": "YulIdentifier", + "src": "2288:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2288:18:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2308:4:20", + "type": "", + "value": "0x30" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2284:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2284:29:20" + }, + "variables": [ + { + "name": "tenths", + "nodeType": "YulTypedName", + "src": "2274:6:20", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2323:31:20", + "value": { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2340:9:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2351:2:20", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "2336:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2336:18:20" + }, + "variableNames": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2323:9:20" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2363:45:20", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2387:9:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2398:2:20", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mod", + "nodeType": "YulIdentifier", + "src": "2383:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2383:18:20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2403:4:20", + "type": "", + "value": "0x30" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2379:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2379:29:20" + }, + "variables": [ + { + "name": "hundreds", + "nodeType": "YulTypedName", + "src": "2367:8:20", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2970:103:20", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2994:3:20", + "type": "", + "value": "200" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3003:16:20", + "type": "", + "value": "0x42414c23000000" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "units", + "nodeType": "YulIdentifier", + "src": "3029:5:20" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3040:1:20", + "type": "", + "value": "8" + }, + { + "name": "tenths", + "nodeType": "YulIdentifier", + "src": "3043:6:20" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3036:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "3036:14:20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3025:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "3025:26:20" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3057:2:20", + "type": "", + "value": "16" + }, + { + "name": "hundreds", + "nodeType": "YulIdentifier", + "src": "3061:8:20" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3053:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "3053:17:20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3021:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "3021:50:20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2999:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2999:73:20" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "2990:3:20" + }, + "nodeType": "YulFunctionCall", + "src": "2990:83:20" + }, + "variables": [ + { + "name": "revertReason", + "nodeType": "YulTypedName", + "src": "2974:12:20", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3588:3:20", + "type": "", + "value": "0x0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3593:66:20", + "type": "", + "value": "0x08c379a000000000000000000000000000000000000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3581:6:20" + }, + "nodeType": "YulFunctionCall", + "src": "3581:79:20" + }, + "nodeType": "YulExpressionStatement", + "src": "3581:79:20" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3793:4:20", + "type": "", + "value": "0x04" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3799:66:20", + "type": "", + "value": "0x0000000000000000000000000000000000000000000000000000000000000020" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3786:6:20" + }, + "nodeType": "YulFunctionCall", + "src": "3786:80:20" + }, + "nodeType": "YulExpressionStatement", + "src": "3786:80:20" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3935:4:20", + "type": "", + "value": "0x24" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3941:1:20", + "type": "", + "value": "7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3928:6:20" + }, + "nodeType": "YulFunctionCall", + "src": "3928:15:20" + }, + "nodeType": "YulExpressionStatement", + "src": "3928:15:20" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4008:4:20", + "type": "", + "value": "0x44" + }, + { + "name": "revertReason", + "nodeType": "YulIdentifier", + "src": "4014:12:20" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4001:6:20" + }, + "nodeType": "YulFunctionCall", + "src": "4001:26:20" + }, + "nodeType": "YulExpressionStatement", + "src": "4001:26:20" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4231:1:20", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4234:3:20", + "type": "", + "value": "100" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4224:6:20" + }, + "nodeType": "YulFunctionCall", + "src": "4224:14:20" + }, + "nodeType": "YulExpressionStatement", + "src": "4224:14:20" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 1056, + "isOffset": false, + "isSlot": false, + "src": "2199:9:20", + "valueSize": 1 + }, + { + "declaration": 1056, + "isOffset": false, + "isSlot": false, + "src": "2230:9:20", + "valueSize": 1 + }, + { + "declaration": 1056, + "isOffset": false, + "isSlot": false, + "src": "2247:9:20", + "valueSize": 1 + }, + { + "declaration": 1056, + "isOffset": false, + "isSlot": false, + "src": "2292:9:20", + "valueSize": 1 + }, + { + "declaration": 1056, + "isOffset": false, + "isSlot": false, + "src": "2323:9:20", + "valueSize": 1 + }, + { + "declaration": 1056, + "isOffset": false, + "isSlot": false, + "src": "2340:9:20", + "valueSize": 1 + }, + { + "declaration": 1056, + "isOffset": false, + "isSlot": false, + "src": "2387:9:20", + "valueSize": 1 + } + ], + "id": 1059, + "nodeType": "InlineAssembly", + "src": "1895:2349:20" + } + ] + }, + "documentation": { + "id": 1054, + "nodeType": "StructuredDocumentation", + "src": "969:104:20", + "text": " @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported." + }, + "id": 1061, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_revert", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1057, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1056, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 1061, + "src": "1091:17:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1055, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1091:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1090:19:20" + }, + "returnParameters": { + "id": 1058, + "nodeType": "ParameterList", + "parameters": [], + "src": "1115:0:20" + }, + "scope": 1510, + "src": "1074:3172:20", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 1509, + "linearizedBaseContracts": [ + 1509 + ], + "name": "Errors", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 1064, + "mutability": "constant", + "name": "ADD_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4281:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1062, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4281:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "30", + "id": 1063, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4322:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1067, + "mutability": "constant", + "name": "SUB_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4329:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1065, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4329:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 1066, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4370:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1070, + "mutability": "constant", + "name": "SUB_UNDERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4377:43:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1068, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4377:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 1069, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4419:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1073, + "mutability": "constant", + "name": "MUL_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4426:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1071, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4426:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "33", + "id": 1072, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4467:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1076, + "mutability": "constant", + "name": "ZERO_DIVISION", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4474:43:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1074, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4474:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "34", + "id": 1075, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4516:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1079, + "mutability": "constant", + "name": "DIV_INTERNAL", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4523:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1077, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4523:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "35", + "id": 1078, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4564:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1082, + "mutability": "constant", + "name": "X_OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4571:45:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1080, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4571:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "36", + "id": 1081, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4615:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_6_by_1", + "typeString": "int_const 6" + }, + "value": "6" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1085, + "mutability": "constant", + "name": "Y_OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4622:45:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1083, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4622:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "37", + "id": 1084, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4666:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1088, + "mutability": "constant", + "name": "PRODUCT_OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4673:51:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1086, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4673:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "38", + "id": 1087, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4723:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1091, + "mutability": "constant", + "name": "INVALID_EXPONENT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4730:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1089, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4730:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "39", + "id": 1090, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4775:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1094, + "mutability": "constant", + "name": "OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4796:45:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1092, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4796:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313030", + "id": 1093, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4838:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "value": "100" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1097, + "mutability": "constant", + "name": "UNSORTED_ARRAY", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4847:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1095, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4847:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313031", + "id": 1096, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4890:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_101_by_1", + "typeString": "int_const 101" + }, + "value": "101" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1100, + "mutability": "constant", + "name": "UNSORTED_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4899:47:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1098, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4899:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313032", + "id": 1099, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4943:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_102_by_1", + "typeString": "int_const 102" + }, + "value": "102" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1103, + "mutability": "constant", + "name": "INPUT_LENGTH_MISMATCH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "4952:53:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1101, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4952:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313033", + "id": 1102, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5002:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_103_by_1", + "typeString": "int_const 103" + }, + "value": "103" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1106, + "mutability": "constant", + "name": "ZERO_TOKEN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5011:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1104, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5011:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313034", + "id": 1105, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5050:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_104_by_1", + "typeString": "int_const 104" + }, + "value": "104" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1109, + "mutability": "constant", + "name": "MIN_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5080:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1107, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5080:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323030", + "id": 1108, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5119:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_200_by_1", + "typeString": "int_const 200" + }, + "value": "200" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1112, + "mutability": "constant", + "name": "MAX_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5128:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1110, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5128:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323031", + "id": 1111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5167:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_201_by_1", + "typeString": "int_const 201" + }, + "value": "201" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1115, + "mutability": "constant", + "name": "MAX_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5176:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1113, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5176:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323032", + "id": 1114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5228:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_202_by_1", + "typeString": "int_const 202" + }, + "value": "202" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1118, + "mutability": "constant", + "name": "MIN_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5237:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1116, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5237:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323033", + "id": 1117, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5289:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_203_by_1", + "typeString": "int_const 203" + }, + "value": "203" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1121, + "mutability": "constant", + "name": "MINIMUM_BPT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5298:43:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1119, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5298:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323034", + "id": 1120, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5338:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_204_by_1", + "typeString": "int_const 204" + }, + "value": "204" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1124, + "mutability": "constant", + "name": "CALLER_NOT_VAULT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5347:48:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1122, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5347:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323035", + "id": 1123, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5392:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_205_by_1", + "typeString": "int_const 205" + }, + "value": "205" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1127, + "mutability": "constant", + "name": "UNINITIALIZED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5401:45:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5401:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323036", + "id": 1126, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5443:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_206_by_1", + "typeString": "int_const 206" + }, + "value": "206" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1130, + "mutability": "constant", + "name": "BPT_IN_MAX_AMOUNT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5452:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1128, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5452:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323037", + "id": 1129, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5498:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_207_by_1", + "typeString": "int_const 207" + }, + "value": "207" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1133, + "mutability": "constant", + "name": "BPT_OUT_MIN_AMOUNT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5507:50:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5507:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323038", + "id": 1132, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5554:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_208_by_1", + "typeString": "int_const 208" + }, + "value": "208" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1136, + "mutability": "constant", + "name": "EXPIRED_PERMIT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5563:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5563:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323039", + "id": 1135, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5606:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_209_by_1", + "typeString": "int_const 209" + }, + "value": "209" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1139, + "mutability": "constant", + "name": "NOT_TWO_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5615:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1137, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5615:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323130", + "id": 1138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5658:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_210_by_1", + "typeString": "int_const 210" + }, + "value": "210" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1142, + "mutability": "constant", + "name": "DISABLED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5667:40:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1140, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5667:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323131", + "id": 1141, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5704:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_211_by_1", + "typeString": "int_const 211" + }, + "value": "211" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1145, + "mutability": "constant", + "name": "MIN_AMP", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5727:39:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1143, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5727:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333030", + "id": 1144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5763:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_300_by_1", + "typeString": "int_const 300" + }, + "value": "300" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1148, + "mutability": "constant", + "name": "MAX_AMP", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5772:39:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1146, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5772:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333031", + "id": 1147, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5808:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_301_by_1", + "typeString": "int_const 301" + }, + "value": "301" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1151, + "mutability": "constant", + "name": "MIN_WEIGHT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5817:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1149, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5817:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333032", + "id": 1150, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5856:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_302_by_1", + "typeString": "int_const 302" + }, + "value": "302" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1154, + "mutability": "constant", + "name": "MAX_STABLE_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5865:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1152, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5865:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333033", + "id": 1153, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5911:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_303_by_1", + "typeString": "int_const 303" + }, + "value": "303" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1157, + "mutability": "constant", + "name": "MAX_IN_RATIO", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5920:44:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1155, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5920:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333034", + "id": 1156, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5961:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_304_by_1", + "typeString": "int_const 304" + }, + "value": "304" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1160, + "mutability": "constant", + "name": "MAX_OUT_RATIO", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "5970:45:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1158, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5970:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333035", + "id": 1159, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6012:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_305_by_1", + "typeString": "int_const 305" + }, + "value": "305" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1163, + "mutability": "constant", + "name": "MIN_BPT_IN_FOR_TOKEN_OUT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6021:56:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1161, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6021:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333036", + "id": 1162, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6074:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_306_by_1", + "typeString": "int_const 306" + }, + "value": "306" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1166, + "mutability": "constant", + "name": "MAX_OUT_BPT_FOR_TOKEN_IN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6083:56:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1164, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6083:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333037", + "id": 1165, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6136:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_307_by_1", + "typeString": "int_const 307" + }, + "value": "307" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1169, + "mutability": "constant", + "name": "NORMALIZED_WEIGHT_INVARIANT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6145:59:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1167, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6145:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333038", + "id": 1168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6201:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_308_by_1", + "typeString": "int_const 308" + }, + "value": "308" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1172, + "mutability": "constant", + "name": "INVALID_TOKEN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6210:45:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1170, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6210:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333039", + "id": 1171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6252:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_309_by_1", + "typeString": "int_const 309" + }, + "value": "309" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1175, + "mutability": "constant", + "name": "UNHANDLED_JOIN_KIND", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6261:51:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1173, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6261:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333130", + "id": 1174, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6309:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_310_by_1", + "typeString": "int_const 310" + }, + "value": "310" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1178, + "mutability": "constant", + "name": "ZERO_INVARIANT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6318:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1176, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6318:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333131", + "id": 1177, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6361:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_311_by_1", + "typeString": "int_const 311" + }, + "value": "311" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1181, + "mutability": "constant", + "name": "ORACLE_INVALID_SECONDS_QUERY", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6370:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6370:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333132", + "id": 1180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6427:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_312_by_1", + "typeString": "int_const 312" + }, + "value": "312" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1184, + "mutability": "constant", + "name": "ORACLE_NOT_INITIALIZED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6436:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1182, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6436:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333133", + "id": 1183, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6487:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_313_by_1", + "typeString": "int_const 313" + }, + "value": "313" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1187, + "mutability": "constant", + "name": "ORACLE_QUERY_TOO_OLD", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6496:52:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1185, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6496:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333134", + "id": 1186, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6545:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_314_by_1", + "typeString": "int_const 314" + }, + "value": "314" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1190, + "mutability": "constant", + "name": "ORACLE_INVALID_INDEX", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6554:52:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1188, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6554:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333135", + "id": 1189, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6603:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_315_by_1", + "typeString": "int_const 315" + }, + "value": "315" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1193, + "mutability": "constant", + "name": "ORACLE_BAD_SECS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6612:47:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1191, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6612:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333136", + "id": 1192, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6656:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_316_by_1", + "typeString": "int_const 316" + }, + "value": "316" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1196, + "mutability": "constant", + "name": "AMP_END_TIME_TOO_CLOSE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6665:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1194, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6665:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333137", + "id": 1195, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6716:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_317_by_1", + "typeString": "int_const 317" + }, + "value": "317" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1199, + "mutability": "constant", + "name": "AMP_ONGOING_UPDATE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6725:50:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6725:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333138", + "id": 1198, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6772:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_318_by_1", + "typeString": "int_const 318" + }, + "value": "318" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1202, + "mutability": "constant", + "name": "AMP_RATE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6781:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1200, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6781:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333139", + "id": 1201, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6827:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_319_by_1", + "typeString": "int_const 319" + }, + "value": "319" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1205, + "mutability": "constant", + "name": "AMP_NO_ONGOING_UPDATE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6836:53:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1203, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6836:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333230", + "id": 1204, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6886:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_320_by_1", + "typeString": "int_const 320" + }, + "value": "320" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1208, + "mutability": "constant", + "name": "STABLE_INVARIANT_DIDNT_CONVERGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6895:63:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1206, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6895:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333231", + "id": 1207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6955:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_321_by_1", + "typeString": "int_const 321" + }, + "value": "321" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1211, + "mutability": "constant", + "name": "STABLE_GET_BALANCE_DIDNT_CONVERGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "6964:65:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1209, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6964:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333232", + "id": 1210, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7026:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_322_by_1", + "typeString": "int_const 322" + }, + "value": "322" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1214, + "mutability": "constant", + "name": "RELAYER_NOT_CONTRACT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7035:52:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7035:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333233", + "id": 1213, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7084:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_323_by_1", + "typeString": "int_const 323" + }, + "value": "323" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1217, + "mutability": "constant", + "name": "BASE_POOL_RELAYER_NOT_CALLED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7093:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1215, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7093:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333234", + "id": 1216, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7150:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_324_by_1", + "typeString": "int_const 324" + }, + "value": "324" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1220, + "mutability": "constant", + "name": "REBALANCING_RELAYER_REENTERED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7159:61:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1218, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7159:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333235", + "id": 1219, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7217:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_325_by_1", + "typeString": "int_const 325" + }, + "value": "325" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1223, + "mutability": "constant", + "name": "GRADUAL_UPDATE_TIME_TRAVEL", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7226:58:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7226:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333236", + "id": 1222, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7281:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_326_by_1", + "typeString": "int_const 326" + }, + "value": "326" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1226, + "mutability": "constant", + "name": "SWAPS_DISABLED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7290:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1224, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7290:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333237", + "id": 1225, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7333:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_327_by_1", + "typeString": "int_const 327" + }, + "value": "327" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1229, + "mutability": "constant", + "name": "CALLER_IS_NOT_LBP_OWNER", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7342:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1227, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7342:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333238", + "id": 1228, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7394:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_328_by_1", + "typeString": "int_const 328" + }, + "value": "328" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1232, + "mutability": "constant", + "name": "PRICE_RATE_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7403:51:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1230, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7403:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333239", + "id": 1231, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7451:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_329_by_1", + "typeString": "int_const 329" + }, + "value": "329" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1235, + "mutability": "constant", + "name": "INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7460:75:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1233, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7460:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333330", + "id": 1234, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7532:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_330_by_1", + "typeString": "int_const 330" + }, + "value": "330" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1238, + "mutability": "constant", + "name": "WEIGHT_CHANGE_TOO_FAST", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7541:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1236, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7541:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333331", + "id": 1237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7592:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_331_by_1", + "typeString": "int_const 331" + }, + "value": "331" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1241, + "mutability": "constant", + "name": "LOWER_GREATER_THAN_UPPER_TARGET", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7601:63:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1239, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7601:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333332", + "id": 1240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7661:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_332_by_1", + "typeString": "int_const 332" + }, + "value": "332" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1244, + "mutability": "constant", + "name": "UPPER_TARGET_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7670:53:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1242, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7670:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333333", + "id": 1243, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7720:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_333_by_1", + "typeString": "int_const 333" + }, + "value": "333" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1247, + "mutability": "constant", + "name": "UNHANDLED_BY_LINEAR_POOL", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7729:56:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1245, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7729:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333334", + "id": 1246, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7782:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_334_by_1", + "typeString": "int_const 334" + }, + "value": "334" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1250, + "mutability": "constant", + "name": "OUT_OF_TARGET_RANGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7791:51:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1248, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7791:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333335", + "id": 1249, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7839:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_335_by_1", + "typeString": "int_const 335" + }, + "value": "335" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1253, + "mutability": "constant", + "name": "UNHANDLED_EXIT_KIND", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7848:51:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1251, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7848:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333336", + "id": 1252, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7896:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_336_by_1", + "typeString": "int_const 336" + }, + "value": "336" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1256, + "mutability": "constant", + "name": "UNAUTHORIZED_EXIT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7905:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1254, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7905:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333337", + "id": 1255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7951:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_337_by_1", + "typeString": "int_const 337" + }, + "value": "337" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1259, + "mutability": "constant", + "name": "MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "7960:66:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1257, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7960:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333338", + "id": 1258, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8023:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_338_by_1", + "typeString": "int_const 338" + }, + "value": "338" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1262, + "mutability": "constant", + "name": "UNHANDLED_BY_MANAGED_POOL", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8032:57:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1260, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8032:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333339", + "id": 1261, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8086:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_339_by_1", + "typeString": "int_const 339" + }, + "value": "339" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1265, + "mutability": "constant", + "name": "UNHANDLED_BY_PHANTOM_POOL", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8095:57:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1263, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8095:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333430", + "id": 1264, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8149:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_340_by_1", + "typeString": "int_const 340" + }, + "value": "340" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1268, + "mutability": "constant", + "name": "TOKEN_DOES_NOT_HAVE_RATE_PROVIDER", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8158:65:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1266, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8158:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333431", + "id": 1267, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8220:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_341_by_1", + "typeString": "int_const 341" + }, + "value": "341" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1271, + "mutability": "constant", + "name": "INVALID_INITIALIZATION", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8229:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1269, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8229:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333432", + "id": 1270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8280:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_342_by_1", + "typeString": "int_const 342" + }, + "value": "342" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1274, + "mutability": "constant", + "name": "OUT_OF_NEW_TARGET_RANGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8289:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1272, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8289:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333433", + "id": 1273, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8341:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_343_by_1", + "typeString": "int_const 343" + }, + "value": "343" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1277, + "mutability": "constant", + "name": "UNAUTHORIZED_OPERATION", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8350:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1275, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8350:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333434", + "id": 1276, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8401:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_344_by_1", + "typeString": "int_const 344" + }, + "value": "344" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1280, + "mutability": "constant", + "name": "UNINITIALIZED_POOL_CONTROLLER", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8410:61:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1278, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8410:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333435", + "id": 1279, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8468:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_345_by_1", + "typeString": "int_const 345" + }, + "value": "345" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1283, + "mutability": "constant", + "name": "SET_SWAP_FEE_DURING_FEE_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8477:62:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1281, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8477:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333436", + "id": 1282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8536:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_346_by_1", + "typeString": "int_const 346" + }, + "value": "346" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1286, + "mutability": "constant", + "name": "SET_SWAP_FEE_PENDING_FEE_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8545:63:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1284, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8545:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333437", + "id": 1285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8605:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_347_by_1", + "typeString": "int_const 347" + }, + "value": "347" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1289, + "mutability": "constant", + "name": "CHANGE_TOKENS_DURING_WEIGHT_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8614:66:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1287, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8614:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333438", + "id": 1288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8677:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_348_by_1", + "typeString": "int_const 348" + }, + "value": "348" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1292, + "mutability": "constant", + "name": "CHANGE_TOKENS_PENDING_WEIGHT_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8686:67:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1290, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8686:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333439", + "id": 1291, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8750:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_349_by_1", + "typeString": "int_const 349" + }, + "value": "349" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1295, + "mutability": "constant", + "name": "MAX_WEIGHT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8759:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1293, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8759:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333530", + "id": 1294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8798:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_350_by_1", + "typeString": "int_const 350" + }, + "value": "350" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1298, + "mutability": "constant", + "name": "UNAUTHORIZED_JOIN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8807:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1296, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8807:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333531", + "id": 1297, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8853:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_351_by_1", + "typeString": "int_const 351" + }, + "value": "351" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1301, + "mutability": "constant", + "name": "MAX_MANAGEMENT_AUM_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8862:65:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1299, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8862:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333532", + "id": 1300, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8924:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_352_by_1", + "typeString": "int_const 352" + }, + "value": "352" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1304, + "mutability": "constant", + "name": "REENTRANCY", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8945:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1302, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8945:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343030", + "id": 1303, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8984:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_400_by_1", + "typeString": "int_const 400" + }, + "value": "400" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1307, + "mutability": "constant", + "name": "SENDER_NOT_ALLOWED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "8993:50:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1305, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8993:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343031", + "id": 1306, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9040:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_401_by_1", + "typeString": "int_const 401" + }, + "value": "401" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1310, + "mutability": "constant", + "name": "PAUSED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9049:38:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9049:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343032", + "id": 1309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9084:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_402_by_1", + "typeString": "int_const 402" + }, + "value": "402" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1313, + "mutability": "constant", + "name": "PAUSE_WINDOW_EXPIRED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9093:52:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1311, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9093:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343033", + "id": 1312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9142:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_403_by_1", + "typeString": "int_const 403" + }, + "value": "403" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1316, + "mutability": "constant", + "name": "MAX_PAUSE_WINDOW_DURATION", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9151:57:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1314, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9151:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343034", + "id": 1315, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9205:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_404_by_1", + "typeString": "int_const 404" + }, + "value": "404" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1319, + "mutability": "constant", + "name": "MAX_BUFFER_PERIOD_DURATION", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9214:58:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1317, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9214:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343035", + "id": 1318, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9269:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_405_by_1", + "typeString": "int_const 405" + }, + "value": "405" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1322, + "mutability": "constant", + "name": "INSUFFICIENT_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9278:52:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1320, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9278:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343036", + "id": 1321, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9327:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_406_by_1", + "typeString": "int_const 406" + }, + "value": "406" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1325, + "mutability": "constant", + "name": "INSUFFICIENT_ALLOWANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9336:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1323, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9336:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343037", + "id": 1324, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9387:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_407_by_1", + "typeString": "int_const 407" + }, + "value": "407" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1328, + "mutability": "constant", + "name": "ERC20_TRANSFER_FROM_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9396:64:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1326, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9396:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343038", + "id": 1327, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9457:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_408_by_1", + "typeString": "int_const 408" + }, + "value": "408" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1331, + "mutability": "constant", + "name": "ERC20_TRANSFER_TO_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9466:62:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1329, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9466:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343039", + "id": 1330, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9525:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_409_by_1", + "typeString": "int_const 409" + }, + "value": "409" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1334, + "mutability": "constant", + "name": "ERC20_MINT_TO_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9534:58:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1332, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9534:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343130", + "id": 1333, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9589:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_410_by_1", + "typeString": "int_const 410" + }, + "value": "410" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1337, + "mutability": "constant", + "name": "ERC20_BURN_FROM_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9598:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1335, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9598:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343131", + "id": 1336, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9655:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_411_by_1", + "typeString": "int_const 411" + }, + "value": "411" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1340, + "mutability": "constant", + "name": "ERC20_APPROVE_FROM_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9664:63:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1338, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9664:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343132", + "id": 1339, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9724:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_412_by_1", + "typeString": "int_const 412" + }, + "value": "412" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1343, + "mutability": "constant", + "name": "ERC20_APPROVE_TO_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9733:61:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1341, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9733:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343133", + "id": 1342, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9791:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_413_by_1", + "typeString": "int_const 413" + }, + "value": "413" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1346, + "mutability": "constant", + "name": "ERC20_TRANSFER_EXCEEDS_ALLOWANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9800:64:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1344, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9800:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343134", + "id": 1345, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9861:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_414_by_1", + "typeString": "int_const 414" + }, + "value": "414" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1349, + "mutability": "constant", + "name": "ERC20_DECREASED_ALLOWANCE_BELOW_ZERO", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9870:68:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1347, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9870:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343135", + "id": 1348, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9935:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_415_by_1", + "typeString": "int_const 415" + }, + "value": "415" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1352, + "mutability": "constant", + "name": "ERC20_TRANSFER_EXCEEDS_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "9944:62:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1350, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9944:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343136", + "id": 1351, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10003:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_416_by_1", + "typeString": "int_const 416" + }, + "value": "416" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1355, + "mutability": "constant", + "name": "ERC20_BURN_EXCEEDS_ALLOWANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10012:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1353, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10012:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343137", + "id": 1354, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10069:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_417_by_1", + "typeString": "int_const 417" + }, + "value": "417" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1358, + "mutability": "constant", + "name": "SAFE_ERC20_CALL_FAILED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10078:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1356, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10078:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343138", + "id": 1357, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10129:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_418_by_1", + "typeString": "int_const 418" + }, + "value": "418" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1361, + "mutability": "constant", + "name": "ADDRESS_INSUFFICIENT_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10138:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1359, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10138:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343139", + "id": 1360, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10195:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_419_by_1", + "typeString": "int_const 419" + }, + "value": "419" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1364, + "mutability": "constant", + "name": "ADDRESS_CANNOT_SEND_VALUE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10204:57:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1362, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10204:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343230", + "id": 1363, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10258:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_420_by_1", + "typeString": "int_const 420" + }, + "value": "420" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1367, + "mutability": "constant", + "name": "SAFE_CAST_VALUE_CANT_FIT_INT256", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10267:63:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1365, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10267:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343231", + "id": 1366, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10327:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_421_by_1", + "typeString": "int_const 421" + }, + "value": "421" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1370, + "mutability": "constant", + "name": "GRANT_SENDER_NOT_ADMIN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10336:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1368, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10336:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343232", + "id": 1369, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10387:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_422_by_1", + "typeString": "int_const 422" + }, + "value": "422" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1373, + "mutability": "constant", + "name": "REVOKE_SENDER_NOT_ADMIN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10396:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1371, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10396:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343233", + "id": 1372, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10448:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_423_by_1", + "typeString": "int_const 423" + }, + "value": "423" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1376, + "mutability": "constant", + "name": "RENOUNCE_SENDER_NOT_ALLOWED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10457:59:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1374, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10457:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343234", + "id": 1375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10513:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_424_by_1", + "typeString": "int_const 424" + }, + "value": "424" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1379, + "mutability": "constant", + "name": "BUFFER_PERIOD_EXPIRED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10522:53:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1377, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10522:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343235", + "id": 1378, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10572:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_425_by_1", + "typeString": "int_const 425" + }, + "value": "425" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1382, + "mutability": "constant", + "name": "CALLER_IS_NOT_OWNER", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10581:51:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1380, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10581:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343236", + "id": 1381, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10629:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_426_by_1", + "typeString": "int_const 426" + }, + "value": "426" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1385, + "mutability": "constant", + "name": "NEW_OWNER_IS_ZERO", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10638:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1383, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10638:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343237", + "id": 1384, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10684:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_427_by_1", + "typeString": "int_const 427" + }, + "value": "427" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1388, + "mutability": "constant", + "name": "CODE_DEPLOYMENT_FAILED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10693:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1386, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10693:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343238", + "id": 1387, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10744:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_428_by_1", + "typeString": "int_const 428" + }, + "value": "428" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1391, + "mutability": "constant", + "name": "CALL_TO_NON_CONTRACT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10753:52:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1389, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10753:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343239", + "id": 1390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10802:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_429_by_1", + "typeString": "int_const 429" + }, + "value": "429" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1394, + "mutability": "constant", + "name": "LOW_LEVEL_CALL_FAILED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10811:53:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10811:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343330", + "id": 1393, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10861:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_430_by_1", + "typeString": "int_const 430" + }, + "value": "430" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1397, + "mutability": "constant", + "name": "NOT_PAUSED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10870:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1395, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10870:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343331", + "id": 1396, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10909:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_431_by_1", + "typeString": "int_const 431" + }, + "value": "431" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1400, + "mutability": "constant", + "name": "ADDRESS_ALREADY_ALLOWLISTED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10918:59:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1398, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10918:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343332", + "id": 1399, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10974:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_432_by_1", + "typeString": "int_const 432" + }, + "value": "432" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1403, + "mutability": "constant", + "name": "ADDRESS_NOT_ALLOWLISTED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "10983:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1401, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10983:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343333", + "id": 1402, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11035:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_433_by_1", + "typeString": "int_const 433" + }, + "value": "433" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1406, + "mutability": "constant", + "name": "ERC20_BURN_EXCEEDS_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11044:58:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1404, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11044:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343334", + "id": 1405, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11099:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_434_by_1", + "typeString": "int_const 434" + }, + "value": "434" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1409, + "mutability": "constant", + "name": "INVALID_OPERATION", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11108:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1407, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11108:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343335", + "id": 1408, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11154:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_435_by_1", + "typeString": "int_const 435" + }, + "value": "435" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1412, + "mutability": "constant", + "name": "INVALID_POOL_ID", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11177:47:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1410, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11177:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353030", + "id": 1411, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11221:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_500_by_1", + "typeString": "int_const 500" + }, + "value": "500" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1415, + "mutability": "constant", + "name": "CALLER_NOT_POOL", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11230:47:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1413, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11230:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353031", + "id": 1414, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11274:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_501_by_1", + "typeString": "int_const 501" + }, + "value": "501" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1418, + "mutability": "constant", + "name": "SENDER_NOT_ASSET_MANAGER", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11283:56:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1416, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11283:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353032", + "id": 1417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11336:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_502_by_1", + "typeString": "int_const 502" + }, + "value": "502" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1421, + "mutability": "constant", + "name": "USER_DOESNT_ALLOW_RELAYER", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11345:57:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1419, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11345:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353033", + "id": 1420, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11399:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_503_by_1", + "typeString": "int_const 503" + }, + "value": "503" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1424, + "mutability": "constant", + "name": "INVALID_SIGNATURE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11408:49:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1422, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11408:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353034", + "id": 1423, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11454:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_504_by_1", + "typeString": "int_const 504" + }, + "value": "504" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1427, + "mutability": "constant", + "name": "EXIT_BELOW_MIN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11463:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1425, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11463:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353035", + "id": 1426, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11506:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_505_by_1", + "typeString": "int_const 505" + }, + "value": "505" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1430, + "mutability": "constant", + "name": "JOIN_ABOVE_MAX", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11515:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11515:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353036", + "id": 1429, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11558:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_506_by_1", + "typeString": "int_const 506" + }, + "value": "506" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1433, + "mutability": "constant", + "name": "SWAP_LIMIT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11567:42:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11567:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353037", + "id": 1432, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11606:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_507_by_1", + "typeString": "int_const 507" + }, + "value": "507" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1436, + "mutability": "constant", + "name": "SWAP_DEADLINE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11615:45:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1434, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11615:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353038", + "id": 1435, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11657:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_508_by_1", + "typeString": "int_const 508" + }, + "value": "508" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1439, + "mutability": "constant", + "name": "CANNOT_SWAP_SAME_TOKEN", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11666:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11666:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353039", + "id": 1438, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11717:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_509_by_1", + "typeString": "int_const 509" + }, + "value": "509" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1442, + "mutability": "constant", + "name": "UNKNOWN_AMOUNT_IN_FIRST_SWAP", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11726:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1440, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11726:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353130", + "id": 1441, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11783:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_510_by_1", + "typeString": "int_const 510" + }, + "value": "510" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1445, + "mutability": "constant", + "name": "MALCONSTRUCTED_MULTIHOP_SWAP", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11792:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1443, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11792:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353131", + "id": 1444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11849:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_511_by_1", + "typeString": "int_const 511" + }, + "value": "511" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1448, + "mutability": "constant", + "name": "INTERNAL_BALANCE_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11858:57:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1446, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11858:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353132", + "id": 1447, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11912:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_512_by_1", + "typeString": "int_const 512" + }, + "value": "512" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1451, + "mutability": "constant", + "name": "INSUFFICIENT_INTERNAL_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11921:61:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1449, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11921:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353133", + "id": 1450, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11979:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_513_by_1", + "typeString": "int_const 513" + }, + "value": "513" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1454, + "mutability": "constant", + "name": "INVALID_ETH_INTERNAL_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "11988:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1452, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11988:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353134", + "id": 1453, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12045:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_514_by_1", + "typeString": "int_const 514" + }, + "value": "514" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1457, + "mutability": "constant", + "name": "INVALID_POST_LOAN_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12054:57:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1455, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12054:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353135", + "id": 1456, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12108:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_515_by_1", + "typeString": "int_const 515" + }, + "value": "515" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1460, + "mutability": "constant", + "name": "INSUFFICIENT_ETH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12117:48:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1458, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12117:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353136", + "id": 1459, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12162:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_516_by_1", + "typeString": "int_const 516" + }, + "value": "516" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1463, + "mutability": "constant", + "name": "UNALLOCATED_ETH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12171:47:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1461, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12171:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353137", + "id": 1462, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12215:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_517_by_1", + "typeString": "int_const 517" + }, + "value": "517" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1466, + "mutability": "constant", + "name": "ETH_TRANSFER", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12224:44:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1464, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12224:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353138", + "id": 1465, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12265:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_518_by_1", + "typeString": "int_const 518" + }, + "value": "518" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1469, + "mutability": "constant", + "name": "CANNOT_USE_ETH_SENTINEL", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12274:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1467, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12274:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353139", + "id": 1468, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12326:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_519_by_1", + "typeString": "int_const 519" + }, + "value": "519" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1472, + "mutability": "constant", + "name": "TOKENS_MISMATCH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12335:47:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1470, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12335:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353230", + "id": 1471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12379:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_520_by_1", + "typeString": "int_const 520" + }, + "value": "520" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1475, + "mutability": "constant", + "name": "TOKEN_NOT_REGISTERED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12388:52:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1473, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12388:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353231", + "id": 1474, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12437:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_521_by_1", + "typeString": "int_const 521" + }, + "value": "521" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1478, + "mutability": "constant", + "name": "TOKEN_ALREADY_REGISTERED", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12446:56:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1476, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12446:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353232", + "id": 1477, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12499:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_522_by_1", + "typeString": "int_const 522" + }, + "value": "522" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1481, + "mutability": "constant", + "name": "TOKENS_ALREADY_SET", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12508:50:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1479, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12508:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353233", + "id": 1480, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12555:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_523_by_1", + "typeString": "int_const 523" + }, + "value": "523" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1484, + "mutability": "constant", + "name": "TOKENS_LENGTH_MUST_BE_2", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12564:55:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1482, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12564:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353234", + "id": 1483, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12616:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_524_by_1", + "typeString": "int_const 524" + }, + "value": "524" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1487, + "mutability": "constant", + "name": "NONZERO_TOKEN_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12625:53:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1485, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12625:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353235", + "id": 1486, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12675:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_525_by_1", + "typeString": "int_const 525" + }, + "value": "525" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1490, + "mutability": "constant", + "name": "BALANCE_TOTAL_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12684:54:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1488, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12684:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353236", + "id": 1489, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12735:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_526_by_1", + "typeString": "int_const 526" + }, + "value": "526" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1493, + "mutability": "constant", + "name": "POOL_NO_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12744:46:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1491, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12744:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353237", + "id": 1492, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12787:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_527_by_1", + "typeString": "int_const 527" + }, + "value": "527" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1496, + "mutability": "constant", + "name": "INSUFFICIENT_FLASH_LOAN_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12796:63:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1494, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12796:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353238", + "id": 1495, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12856:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_528_by_1", + "typeString": "int_const 528" + }, + "value": "528" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1499, + "mutability": "constant", + "name": "SWAP_FEE_PERCENTAGE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12878:60:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1497, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12878:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363030", + "id": 1498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12935:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_600_by_1", + "typeString": "int_const 600" + }, + "value": "600" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1502, + "mutability": "constant", + "name": "FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "12944:66:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1500, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12944:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363031", + "id": 1501, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13007:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_601_by_1", + "typeString": "int_const 601" + }, + "value": "601" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1505, + "mutability": "constant", + "name": "INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "13016:66:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1503, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13016:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363032", + "id": 1504, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13079:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_602_by_1", + "typeString": "int_const 602" + }, + "value": "602" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1508, + "mutability": "constant", + "name": "AUM_FEE_PERCENTAGE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1509, + "src": "13088:59:20", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1506, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13088:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363033", + "id": 1507, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13144:3:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_603_by_1", + "typeString": "int_const 603" + }, + "value": "603" + }, + "visibility": "internal" + } + ], + "scope": 1510, + "src": "4248:8902:20" + } + ], + "src": "688:12463:20" + }, + "id": 20 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "exportedSymbols": { + "IAuthentication": [ + 1520 + ] + }, + "id": 1521, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1511, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:21" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1520, + "linearizedBaseContracts": [ + 1520 + ], + "name": "IAuthentication", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1512, + "nodeType": "StructuredDocumentation", + "src": "745:116:21", + "text": " @dev Returns the action identifier associated with the external function described by `selector`." + }, + "functionSelector": "851c1bb3", + "id": 1519, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getActionId", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1515, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1514, + "mutability": "mutable", + "name": "selector", + "nodeType": "VariableDeclaration", + "scope": 1519, + "src": "887:15:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 1513, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "887:6:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "886:17:21" + }, + "returnParameters": { + "id": 1518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1517, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1519, + "src": "927:7:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1516, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "927:7:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "926:9:21" + }, + "scope": 1520, + "src": "866:70:21", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1521, + "src": "713:225:21" + } + ], + "src": "688:251:21" + }, + "id": 21 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol", + "exportedSymbols": { + "ISignaturesValidator": [ + 1538 + ] + }, + "id": 1539, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1522, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:22" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1523, + "nodeType": "StructuredDocumentation", + "src": "713:95:22", + "text": " @dev Interface for the SignatureValidator helper, used to support meta-transactions." + }, + "fullyImplemented": false, + "id": 1538, + "linearizedBaseContracts": [ + 1538 + ], + "name": "ISignaturesValidator", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1524, + "nodeType": "StructuredDocumentation", + "src": "846:60:22", + "text": " @dev Returns the EIP712 domain separator." + }, + "functionSelector": "ed24911d", + "id": 1529, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDomainSeparator", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1525, + "nodeType": "ParameterList", + "parameters": [], + "src": "938:2:22" + }, + "returnParameters": { + "id": 1528, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1527, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1529, + "src": "964:7:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1526, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "964:7:22", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "963:9:22" + }, + "scope": 1538, + "src": "911:62:22", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1530, + "nodeType": "StructuredDocumentation", + "src": "979:83:22", + "text": " @dev Returns the next nonce used by an address to sign messages." + }, + "functionSelector": "90193b7c", + "id": 1537, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getNextNonce", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1533, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1532, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1537, + "src": "1089:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1531, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1089:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1088:14:22" + }, + "returnParameters": { + "id": 1536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1535, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1537, + "src": "1126:7:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1534, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1126:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1125:9:22" + }, + "scope": 1538, + "src": "1067:68:22", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1539, + "src": "809:328:22" + } + ], + "src": "688:450:22" + }, + "id": 22 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol", + "exportedSymbols": { + "ITemporarilyPausable": [ + 1557 + ] + }, + "id": 1558, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1540, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:23" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1541, + "nodeType": "StructuredDocumentation", + "src": "713:61:23", + "text": " @dev Interface for the TemporarilyPausable helper." + }, + "fullyImplemented": false, + "id": 1557, + "linearizedBaseContracts": [ + 1557 + ], + "name": "ITemporarilyPausable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 1542, + "nodeType": "StructuredDocumentation", + "src": "812:83:23", + "text": " @dev Emitted every time the pause state changes by `_setPaused`." + }, + "id": 1546, + "name": "PausedStateChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1545, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1544, + "indexed": false, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 1546, + "src": "925:11:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1543, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "925:4:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "924:13:23" + }, + "src": "900:38:23" + }, + { + "documentation": { + "id": 1547, + "nodeType": "StructuredDocumentation", + "src": "944:57:23", + "text": " @dev Returns the current paused state." + }, + "functionSelector": "1c0de051", + "id": 1556, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPausedState", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1548, + "nodeType": "ParameterList", + "parameters": [], + "src": "1029:2:23" + }, + "returnParameters": { + "id": 1555, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1550, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 1556, + "src": "1092:11:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1549, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1092:4:23", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1552, + "mutability": "mutable", + "name": "pauseWindowEndTime", + "nodeType": "VariableDeclaration", + "scope": 1556, + "src": "1117:26:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1551, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1117:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1554, + "mutability": "mutable", + "name": "bufferPeriodEndTime", + "nodeType": "VariableDeclaration", + "scope": 1556, + "src": "1157:27:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1553, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1157:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1078:116:23" + }, + "scope": 1557, + "src": "1006:189:23", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1558, + "src": "775:422:23" + } + ], + "src": "688:510:23" + }, + "id": 23 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol", + "exportedSymbols": { + "IWETH": [ + 1572 + ] + }, + "id": 1573, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1559, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:24" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../openzeppelin/IERC20.sol", + "id": 1560, + "nodeType": "ImportDirective", + "scope": 1573, + "sourceUnit": 1651, + "src": "713:36:24", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1562, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "921:6:24", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 1563, + "nodeType": "InheritanceSpecifier", + "src": "921:6:24" + } + ], + "contractDependencies": [ + 1650 + ], + "contractKind": "interface", + "documentation": { + "id": 1561, + "nodeType": "StructuredDocumentation", + "src": "751:150:24", + "text": " @dev Interface for WETH9.\n See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol" + }, + "fullyImplemented": false, + "id": 1572, + "linearizedBaseContracts": [ + 1572, + 1650 + ], + "name": "IWETH", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "d0e30db0", + "id": 1566, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1564, + "nodeType": "ParameterList", + "parameters": [], + "src": "950:2:24" + }, + "returnParameters": { + "id": 1565, + "nodeType": "ParameterList", + "parameters": [], + "src": "969:0:24" + }, + "scope": 1572, + "src": "934:36:24", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "2e1a7d4d", + "id": 1571, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1569, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1568, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1571, + "src": "994:14:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1567, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "994:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "993:16:24" + }, + "returnParameters": { + "id": 1570, + "nodeType": "ParameterList", + "parameters": [], + "src": "1018:0:24" + }, + "scope": 1572, + "src": "976:43:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1573, + "src": "902:119:24" + } + ], + "src": "688:334:24" + }, + "id": 24 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "exportedSymbols": { + "IERC20": [ + 1650 + ] + }, + "id": 1651, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1574, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:25" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1575, + "nodeType": "StructuredDocumentation", + "src": "58:70:25", + "text": " @dev Interface of the ERC20 standard as defined in the EIP." + }, + "fullyImplemented": false, + "id": 1650, + "linearizedBaseContracts": [ + 1650 + ], + "name": "IERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1576, + "nodeType": "StructuredDocumentation", + "src": "152:66:25", + "text": " @dev Returns the amount of tokens in existence." + }, + "functionSelector": "18160ddd", + "id": 1581, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1577, + "nodeType": "ParameterList", + "parameters": [], + "src": "243:2:25" + }, + "returnParameters": { + "id": 1580, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1579, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1581, + "src": "269:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1578, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "269:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "268:9:25" + }, + "scope": 1650, + "src": "223:55:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1582, + "nodeType": "StructuredDocumentation", + "src": "284:72:25", + "text": " @dev Returns the amount of tokens owned by `account`." + }, + "functionSelector": "70a08231", + "id": 1589, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1585, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1584, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1589, + "src": "380:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1583, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "380:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "379:17:25" + }, + "returnParameters": { + "id": 1588, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1587, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1589, + "src": "420:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1586, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "420:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "419:9:25" + }, + "scope": 1650, + "src": "361:68:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1590, + "nodeType": "StructuredDocumentation", + "src": "435:209:25", + "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": 1599, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1595, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1592, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1599, + "src": "667:17:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1591, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "667:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1594, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1599, + "src": "686:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1593, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "686:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "666:35:25" + }, + "returnParameters": { + "id": 1598, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1597, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1599, + "src": "720:4:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1596, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "720:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "719:6:25" + }, + "scope": 1650, + "src": "649:77:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1600, + "nodeType": "StructuredDocumentation", + "src": "732:264:25", + "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": 1609, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1605, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1602, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1609, + "src": "1020:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1601, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1020:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1604, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1609, + "src": "1035:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1603, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1035:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1019:32:25" + }, + "returnParameters": { + "id": 1608, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1607, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1609, + "src": "1075:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1606, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1075:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1074:9:25" + }, + "scope": 1650, + "src": "1001:83:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1610, + "nodeType": "StructuredDocumentation", + "src": "1090:642:25", + "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": 1619, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1615, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1612, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "1754:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1611, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1754:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1614, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "1771:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1613, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1771:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1753:33:25" + }, + "returnParameters": { + "id": 1618, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1617, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1619, + "src": "1805:4:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1616, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1805:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1804:6:25" + }, + "scope": 1650, + "src": "1737:74:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1620, + "nodeType": "StructuredDocumentation", + "src": "1817:296:25", + "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": 1631, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1627, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1622, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1631, + "src": "2149:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1621, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2149:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1624, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1631, + "src": "2173:17:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1623, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2173:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1626, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1631, + "src": "2200:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1625, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2200:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2139:81:25" + }, + "returnParameters": { + "id": 1630, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1629, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1631, + "src": "2239:4:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1628, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2239:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2238:6:25" + }, + "scope": 1650, + "src": "2118:127:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1632, + "nodeType": "StructuredDocumentation", + "src": "2251:158:25", + "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." + }, + "id": 1640, + "name": "Transfer", + "nodeType": "EventDefinition", + "parameters": { + "id": 1639, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1634, + "indexed": true, + "mutability": "mutable", + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 1640, + "src": "2429:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1633, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2429:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1636, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1640, + "src": "2451:18:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1635, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2451:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1638, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 1640, + "src": "2471:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1637, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2471:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2428:57:25" + }, + "src": "2414:72:25" + }, + { + "anonymous": false, + "documentation": { + "id": 1641, + "nodeType": "StructuredDocumentation", + "src": "2492:148:25", + "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." + }, + "id": 1649, + "name": "Approval", + "nodeType": "EventDefinition", + "parameters": { + "id": 1648, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1643, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1649, + "src": "2660:21:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1642, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2660:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1645, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1649, + "src": "2683:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1644, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2683:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1647, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 1649, + "src": "2708:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1646, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2708:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2659:63:25" + }, + "src": "2645:78:25" + } + ], + "scope": 1651, + "src": "129:2596:25" + } + ], + "src": "33:2693:25" + }, + "id": 25 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol", + "exportedSymbols": { + "IERC20Permit": [ + 1686 + ] + }, + "id": 1687, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1652, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:26" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1653, + "nodeType": "StructuredDocumentation", + "src": "58:482:26", + "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": 1686, + "linearizedBaseContracts": [ + 1686 + ], + "name": "IERC20Permit", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1654, + "nodeType": "StructuredDocumentation", + "src": "570:788:26", + "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": 1671, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "permit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1669, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1656, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1671, + "src": "1388:13:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1655, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1388:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1658, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1671, + "src": "1411:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1657, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1411:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1660, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 1671, + "src": "1436:13:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1659, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1436:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1662, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 1671, + "src": "1459:16:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1661, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1459:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1664, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 1671, + "src": "1485:7:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1663, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1485:5:26", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1666, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 1671, + "src": "1502:9:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1665, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1502:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1668, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 1671, + "src": "1521:9:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1667, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1521:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1378:158:26" + }, + "returnParameters": { + "id": 1670, + "nodeType": "ParameterList", + "parameters": [], + "src": "1545:0:26" + }, + "scope": 1686, + "src": "1363:183:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1672, + "nodeType": "StructuredDocumentation", + "src": "1552:294:26", + "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": 1679, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "nonces", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1675, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1674, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1679, + "src": "1867:13:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1673, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1867:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1866:15:26" + }, + "returnParameters": { + "id": 1678, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1677, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1679, + "src": "1905:7:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1676, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1905:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1904:9:26" + }, + "scope": 1686, + "src": "1851:63:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1680, + "nodeType": "StructuredDocumentation", + "src": "1920:128:26", + "text": " @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}." + }, + "functionSelector": "3644e515", + "id": 1685, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "DOMAIN_SEPARATOR", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1681, + "nodeType": "ParameterList", + "parameters": [], + "src": "2131:2:26" + }, + "returnParameters": { + "id": 1684, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1683, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1685, + "src": "2157:7:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1682, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2157:7:26", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2156:9:26" + }, + "scope": 1686, + "src": "2106:60:26", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1687, + "src": "541:1627:26" + } + ], + "src": "33:2136:26" + }, + "id": 26 + }, + "@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol", + "exportedSymbols": { + "IBALTokenHolder": [ + 1720 + ] + }, + "id": 1721, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1688, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:27" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 1689, + "nodeType": "ImportDirective", + "scope": 1721, + "sourceUnit": 1521, + "src": "713:55:27", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1690, + "nodeType": "ImportDirective", + "scope": 1721, + "sourceUnit": 1651, + "src": "769:51:27", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol", + "file": "../liquidity-mining/IBalancerToken.sol", + "id": 1691, + "nodeType": "ImportDirective", + "scope": 1721, + "sourceUnit": 253, + "src": "821:48:27", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1692, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1520, + "src": "900:15:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1520", + "typeString": "contract IAuthentication" + } + }, + "id": 1693, + "nodeType": "InheritanceSpecifier", + "src": "900:15:27" + } + ], + "contractDependencies": [ + 1520 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1720, + "linearizedBaseContracts": [ + 1720, + 1520 + ], + "name": "IBALTokenHolder", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "c0039699", + "id": 1698, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBalancerToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1694, + "nodeType": "ParameterList", + "parameters": [], + "src": "947:2:27" + }, + "returnParameters": { + "id": 1697, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1696, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1698, + "src": "973:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + }, + "typeName": { + "id": 1695, + "name": "IBalancerToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 252, + "src": "973:14:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "visibility": "internal" + } + ], + "src": "972:16:27" + }, + "scope": 1720, + "src": "922:67:27", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "17d7de7c", + "id": 1703, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getName", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1699, + "nodeType": "ParameterList", + "parameters": [], + "src": "1011:2:27" + }, + "returnParameters": { + "id": 1702, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1701, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1703, + "src": "1037:13:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1700, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1037:6:27", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1036:15:27" + }, + "scope": 1720, + "src": "995:57:27", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "c1075329", + "id": 1710, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawFunds", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1708, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1705, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1710, + "src": "1081:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1704, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1081:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1707, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1710, + "src": "1100:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1706, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1100:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1080:35:27" + }, + "returnParameters": { + "id": 1709, + "nodeType": "ParameterList", + "parameters": [], + "src": "1124:0:27" + }, + "scope": 1720, + "src": "1058:67:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "8b6ca32c", + "id": 1719, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "sweepTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1717, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1712, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1719, + "src": "1161:12:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1711, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1161:6:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1714, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1719, + "src": "1183:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1713, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1183:7:27", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1716, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1719, + "src": "1210:14:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1715, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1210:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1151:79:27" + }, + "returnParameters": { + "id": 1718, + "nodeType": "ParameterList", + "parameters": [], + "src": "1239:0:27" + }, + "scope": 1720, + "src": "1131:109:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1721, + "src": "871:371:27" + } + ], + "src": "688:555:27" + }, + "id": 27 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol", + "exportedSymbols": { + "IAsset": [ + 1724 + ] + }, + "id": 1725, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1722, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:28" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1723, + "nodeType": "StructuredDocumentation", + "src": "713:309:28", + "text": " @dev This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero\n address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like\n types.\n This concept is unrelated to a Pool's Asset Managers." + }, + "fullyImplemented": true, + "id": 1724, + "linearizedBaseContracts": [ + 1724 + ], + "name": "IAsset", + "nodeType": "ContractDefinition", + "nodes": [], + "scope": 1725, + "src": "1023:73:28" + } + ], + "src": "688:409:28" + }, + "id": 28 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "exportedSymbols": { + "IAuthorizer": [ + 1739 + ] + }, + "id": 1740, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1726, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:29" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1739, + "linearizedBaseContracts": [ + 1739 + ], + "name": "IAuthorizer", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1727, + "nodeType": "StructuredDocumentation", + "src": "741:121:29", + "text": " @dev Returns true if `account` can perform the action described by `actionId` in the contract `where`." + }, + "functionSelector": "9be2a884", + "id": 1738, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "canPerform", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1734, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1729, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 1738, + "src": "896:16:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1728, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "896:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1731, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1738, + "src": "922:15:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1730, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "922:7:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1733, + "mutability": "mutable", + "name": "where", + "nodeType": "VariableDeclaration", + "scope": 1738, + "src": "947:13:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1732, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "947:7:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "886:80:29" + }, + "returnParameters": { + "id": 1737, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1736, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1738, + "src": "990:4:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1735, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "990:4:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "989:6:29" + }, + "scope": 1739, + "src": "867:129:29", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1740, + "src": "713:285:29" + } + ], + "src": "688:311:29" + }, + "id": 29 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol", + "exportedSymbols": { + "IFlashLoanRecipient": [ + 1758 + ] + }, + "id": 1759, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1741, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:30" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1742, + "nodeType": "ImportDirective", + "scope": 1759, + "sourceUnit": 1651, + "src": "765:51:30", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1758, + "linearizedBaseContracts": [ + 1758 + ], + "name": "IFlashLoanRecipient", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1743, + "nodeType": "StructuredDocumentation", + "src": "854:496:30", + "text": " @dev When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient.\n At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this\n call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the\n Vault, or else the entire flash loan will revert.\n `userData` is the same value passed in the `IVault.flashLoan` call." + }, + "functionSelector": "f04f2707", + "id": 1757, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "receiveFlashLoan", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1755, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1746, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1757, + "src": "1390:22:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1744, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1390:6:30", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 1745, + "nodeType": "ArrayTypeName", + "src": "1390:8:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1749, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 1757, + "src": "1422:24:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1747, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1422:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1748, + "nodeType": "ArrayTypeName", + "src": "1422:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1752, + "mutability": "mutable", + "name": "feeAmounts", + "nodeType": "VariableDeclaration", + "scope": 1757, + "src": "1456:27:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1750, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1456:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1751, + "nodeType": "ArrayTypeName", + "src": "1456:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1754, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1757, + "src": "1493:21:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1753, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1493:5:30", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1380:140:30" + }, + "returnParameters": { + "id": 1756, + "nodeType": "ParameterList", + "parameters": [], + "src": "1529:0:30" + }, + "scope": 1758, + "src": "1355:175:30", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1759, + "src": "818:714:30" + } + ], + "src": "688:845:30" + }, + "id": 30 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol", + "exportedSymbols": { + "IProtocolFeesCollector": [ + 1823 + ] + }, + "id": 1824, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1760, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:31" + }, + { + "id": 1761, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:31" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1762, + "nodeType": "ImportDirective", + "scope": 1824, + "sourceUnit": 1651, + "src": "747:51:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "./IVault.sol", + "id": 1763, + "nodeType": "ImportDirective", + "scope": 1824, + "sourceUnit": 2289, + "src": "800:22:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "file": "./IAuthorizer.sol", + "id": 1764, + "nodeType": "ImportDirective", + "scope": 1824, + "sourceUnit": 1740, + "src": "823:27:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1823, + "linearizedBaseContracts": [ + 1823 + ], + "name": "IProtocolFeesCollector", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "id": 1768, + "name": "SwapFeePercentageChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1766, + "indexed": false, + "mutability": "mutable", + "name": "newSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1768, + "src": "922:28:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1765, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "922:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "921:30:31" + }, + "src": "891:61:31" + }, + { + "anonymous": false, + "id": 1772, + "name": "FlashLoanFeePercentageChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1771, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1770, + "indexed": false, + "mutability": "mutable", + "name": "newFlashLoanFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1772, + "src": "993:33:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1769, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "993:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "992:35:31" + }, + "src": "957:71:31" + }, + { + "functionSelector": "6daefab6", + "id": 1783, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawCollectedFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1781, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1775, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1783, + "src": "1074:24:31", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1773, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1074:6:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 1774, + "nodeType": "ArrayTypeName", + "src": "1074:8:31", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1778, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 1783, + "src": "1108:26:31", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1776, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1108:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1777, + "nodeType": "ArrayTypeName", + "src": "1108:9:31", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1780, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1783, + "src": "1144:17:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1779, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1144:7:31", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1064:103:31" + }, + "returnParameters": { + "id": 1782, + "nodeType": "ParameterList", + "parameters": [], + "src": "1176:0:31" + }, + "scope": 1823, + "src": "1034:143:31", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "38e9922e", + "id": 1788, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1786, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1785, + "mutability": "mutable", + "name": "newSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1788, + "src": "1213:28:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1784, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1213:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1212:30:31" + }, + "returnParameters": { + "id": 1787, + "nodeType": "ParameterList", + "parameters": [], + "src": "1251:0:31" + }, + "scope": 1823, + "src": "1183:69:31", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "6b6b9f69", + "id": 1793, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setFlashLoanFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1791, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1790, + "mutability": "mutable", + "name": "newFlashLoanFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1793, + "src": "1293:33:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1789, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1293:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1292:35:31" + }, + "returnParameters": { + "id": 1792, + "nodeType": "ParameterList", + "parameters": [], + "src": "1336:0:31" + }, + "scope": 1823, + "src": "1258:79:31", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "55c67628", + "id": 1798, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1794, + "nodeType": "ParameterList", + "parameters": [], + "src": "1372:2:31" + }, + "returnParameters": { + "id": 1797, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1796, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1798, + "src": "1398:7:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1795, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1398:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1397:9:31" + }, + "scope": 1823, + "src": "1343:64:31", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d877845c", + "id": 1803, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getFlashLoanFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1799, + "nodeType": "ParameterList", + "parameters": [], + "src": "1447:2:31" + }, + "returnParameters": { + "id": 1802, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1801, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1803, + "src": "1473:7:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1800, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1473:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1472:9:31" + }, + "scope": 1823, + "src": "1413:69:31", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "e42abf35", + "id": 1812, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getCollectedFeeAmounts", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1807, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1806, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1812, + "src": "1520:22:31", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1804, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1520:6:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 1805, + "nodeType": "ArrayTypeName", + "src": "1520:8:31", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "1519:24:31" + }, + "returnParameters": { + "id": 1811, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1810, + "mutability": "mutable", + "name": "feeAmounts", + "nodeType": "VariableDeclaration", + "scope": 1812, + "src": "1567:27:31", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1808, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1567:7:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1809, + "nodeType": "ArrayTypeName", + "src": "1567:9:31", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "1566:29:31" + }, + "scope": 1823, + "src": "1488:108:31", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "aaabadc5", + "id": 1817, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1813, + "nodeType": "ParameterList", + "parameters": [], + "src": "1624:2:31" + }, + "returnParameters": { + "id": 1816, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1815, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1817, + "src": "1650:11:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1814, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1739, + "src": "1650:11:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1649:13:31" + }, + "scope": 1823, + "src": "1602:61:31", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "fbfa77cf", + "id": 1822, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "vault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1818, + "nodeType": "ParameterList", + "parameters": [], + "src": "1683:2:31" + }, + "returnParameters": { + "id": 1821, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1820, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1822, + "src": "1709:6:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 1819, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1709:6:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1708:8:31" + }, + "scope": 1823, + "src": "1669:48:31", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1824, + "src": "852:867:31" + } + ], + "src": "688:1032:31" + }, + "id": 31 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "exportedSymbols": { + "IVault": [ + 2288 + ] + }, + "id": 2289, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1825, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "688:33:32" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1826, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1651, + "src": "723:51:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 1827, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1521, + "src": "775:55:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol", + "file": "../solidity-utils/helpers/ISignaturesValidator.sol", + "id": 1828, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1539, + "src": "831:60:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol", + "file": "../solidity-utils/helpers/ITemporarilyPausable.sol", + "id": 1829, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1558, + "src": "892:60:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol", + "file": "../solidity-utils/misc/IWETH.sol", + "id": 1830, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1573, + "src": "953:42:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol", + "file": "./IAsset.sol", + "id": 1831, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1725, + "src": "997:22:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "file": "./IAuthorizer.sol", + "id": 1832, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1740, + "src": "1020:27:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol", + "file": "./IFlashLoanRecipient.sol", + "id": 1833, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1759, + "src": "1048:35:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol", + "file": "./IProtocolFeesCollector.sol", + "id": 1834, + "nodeType": "ImportDirective", + "scope": 2289, + "sourceUnit": 1824, + "src": "1084:38:32", + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 1835, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "1124:23:32" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1837, + "name": "ISignaturesValidator", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1538, + "src": "1341:20:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISignaturesValidator_$1538", + "typeString": "contract ISignaturesValidator" + } + }, + "id": 1838, + "nodeType": "InheritanceSpecifier", + "src": "1341:20:32" + }, + { + "baseName": { + "id": 1839, + "name": "ITemporarilyPausable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1557, + "src": "1363:20:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITemporarilyPausable_$1557", + "typeString": "contract ITemporarilyPausable" + } + }, + "id": 1840, + "nodeType": "InheritanceSpecifier", + "src": "1363:20:32" + }, + { + "baseName": { + "id": 1841, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1520, + "src": "1385:15:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1520", + "typeString": "contract IAuthentication" + } + }, + "id": 1842, + "nodeType": "InheritanceSpecifier", + "src": "1385:15:32" + } + ], + "contractDependencies": [ + 1520, + 1538, + 1557 + ], + "contractKind": "interface", + "documentation": { + "id": 1836, + "nodeType": "StructuredDocumentation", + "src": "1149:171:32", + "text": " @dev Full external interface for the Vault core contract - no external or public methods exist in the contract that\n don't override one of these declarations." + }, + "fullyImplemented": false, + "id": 2288, + "linearizedBaseContracts": [ + 2288, + 1520, + 1557, + 1538 + ], + "name": "IVault", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1843, + "nodeType": "StructuredDocumentation", + "src": "2898:55:32", + "text": " @dev Returns the Vault's Authorizer." + }, + "functionSelector": "aaabadc5", + "id": 1848, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1844, + "nodeType": "ParameterList", + "parameters": [], + "src": "2980:2:32" + }, + "returnParameters": { + "id": 1847, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1846, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1848, + "src": "3006:11:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1845, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1739, + "src": "3006:11:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "3005:13:32" + }, + "scope": 2288, + "src": "2958:61:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1849, + "nodeType": "StructuredDocumentation", + "src": "3025:175:32", + "text": " @dev Sets a new Authorizer for the Vault. The caller must be allowed by the current Authorizer to do this.\n Emits an `AuthorizerChanged` event." + }, + "functionSelector": "058a628f", + "id": 1854, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1852, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1851, + "mutability": "mutable", + "name": "newAuthorizer", + "nodeType": "VariableDeclaration", + "scope": 1854, + "src": "3228:25:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1850, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1739, + "src": "3228:11:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "3227:27:32" + }, + "returnParameters": { + "id": 1853, + "nodeType": "ParameterList", + "parameters": [], + "src": "3263:0:32" + }, + "scope": 2288, + "src": "3205:59:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1855, + "nodeType": "StructuredDocumentation", + "src": "3270:80:32", + "text": " @dev Emitted when a new authorizer is set by `setAuthorizer`." + }, + "id": 1859, + "name": "AuthorizerChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1858, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1857, + "indexed": true, + "mutability": "mutable", + "name": "newAuthorizer", + "nodeType": "VariableDeclaration", + "scope": 1859, + "src": "3379:33:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1856, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1739, + "src": "3379:11:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "3378:35:32" + }, + "src": "3355:59:32" + }, + { + "documentation": { + "id": 1860, + "nodeType": "StructuredDocumentation", + "src": "4510:99:32", + "text": " @dev Returns true if `user` has approved `relayer` to act as a relayer for them." + }, + "functionSelector": "fec90d72", + "id": 1869, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "hasApprovedRelayer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1865, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1862, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1869, + "src": "4642:12:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1861, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4642:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1864, + "mutability": "mutable", + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 1869, + "src": "4656:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1863, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4656:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4641:31:32" + }, + "returnParameters": { + "id": 1868, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1867, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1869, + "src": "4696:4:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1866, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4696:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4695:6:32" + }, + "scope": 2288, + "src": "4614:88:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1870, + "nodeType": "StructuredDocumentation", + "src": "4708:178:32", + "text": " @dev Allows `relayer` to act as a relayer for `sender` if `approved` is true, and disallows it otherwise.\n Emits a `RelayerApprovalChanged` event." + }, + "functionSelector": "fa6e671d", + "id": 1879, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setRelayerApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1877, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1872, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1879, + "src": "4928:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1871, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4928:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1874, + "mutability": "mutable", + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 1879, + "src": "4952:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1873, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4952:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1876, + "mutability": "mutable", + "name": "approved", + "nodeType": "VariableDeclaration", + "scope": 1879, + "src": "4977:13:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1875, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4977:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4918:78:32" + }, + "returnParameters": { + "id": 1878, + "nodeType": "ParameterList", + "parameters": [], + "src": "5005:0:32" + }, + "scope": 2288, + "src": "4891:115:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1880, + "nodeType": "StructuredDocumentation", + "src": "5012:104:32", + "text": " @dev Emitted every time a relayer is approved or disapproved by `setRelayerApproval`." + }, + "id": 1888, + "name": "RelayerApprovalChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1887, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1882, + "indexed": true, + "mutability": "mutable", + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 1888, + "src": "5150:23:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1881, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5150:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1884, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1888, + "src": "5175:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1883, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5175:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1886, + "indexed": false, + "mutability": "mutable", + "name": "approved", + "nodeType": "VariableDeclaration", + "scope": 1888, + "src": "5199:13:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1885, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5199:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5149:64:32" + }, + "src": "5121:93:32" + }, + { + "documentation": { + "id": 1889, + "nodeType": "StructuredDocumentation", + "src": "5922:78:32", + "text": " @dev Returns `user`'s Internal Balance for a set of tokens." + }, + "functionSelector": "0f5a6efa", + "id": 1900, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getInternalBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1895, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1891, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1900, + "src": "6033:12:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1890, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6033:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1894, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1900, + "src": "6047:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1892, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "6047:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 1893, + "nodeType": "ArrayTypeName", + "src": "6047:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "6032:38:32" + }, + "returnParameters": { + "id": 1899, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1898, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1900, + "src": "6094:16:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1896, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6094:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1897, + "nodeType": "ArrayTypeName", + "src": "6094:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6093:18:32" + }, + "scope": 2288, + "src": "6005:107:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1901, + "nodeType": "StructuredDocumentation", + "src": "6118:416:32", + "text": " @dev Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer)\n and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as\n it lets integrators reuse a user's Vault allowance.\n For each operation, if the caller is not `sender`, it must be an authorized relayer for them." + }, + "functionSelector": "0e8e3e84", + "id": 1907, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "manageUserBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1905, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1904, + "mutability": "mutable", + "name": "ops", + "nodeType": "VariableDeclaration", + "scope": 1907, + "src": "6566:26:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_UserBalanceOp_$1918_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.UserBalanceOp[]" + }, + "typeName": { + "baseType": { + "id": 1902, + "name": "UserBalanceOp", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1918, + "src": "6566:13:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserBalanceOp_$1918_storage_ptr", + "typeString": "struct IVault.UserBalanceOp" + } + }, + "id": 1903, + "nodeType": "ArrayTypeName", + "src": "6566:15:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_UserBalanceOp_$1918_storage_$dyn_storage_ptr", + "typeString": "struct IVault.UserBalanceOp[]" + } + }, + "visibility": "internal" + } + ], + "src": "6565:28:32" + }, + "returnParameters": { + "id": 1906, + "nodeType": "ParameterList", + "parameters": [], + "src": "6610:0:32" + }, + "scope": 2288, + "src": "6539:72:32", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.UserBalanceOp", + "id": 1918, + "members": [ + { + "constant": false, + "id": 1909, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "6828:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_UserBalanceOpKind_$1923", + "typeString": "enum IVault.UserBalanceOpKind" + }, + "typeName": { + "id": 1908, + "name": "UserBalanceOpKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1923, + "src": "6828:17:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_UserBalanceOpKind_$1923", + "typeString": "enum IVault.UserBalanceOpKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1911, + "mutability": "mutable", + "name": "asset", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "6860:12:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + }, + "typeName": { + "id": 1910, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1724, + "src": "6860:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1913, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "6882:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1912, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6882:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1915, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "6906:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1914, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6906:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1917, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "6930:25:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 1916, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6930:15:32", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "name": "UserBalanceOp", + "nodeType": "StructDefinition", + "scope": 2288, + "src": "6797:165:32", + "visibility": "public" + }, + { + "canonicalName": "IVault.UserBalanceOpKind", + "id": 1923, + "members": [ + { + "id": 1919, + "name": "DEPOSIT_INTERNAL", + "nodeType": "EnumValue", + "src": "8600:16:32" + }, + { + "id": 1920, + "name": "WITHDRAW_INTERNAL", + "nodeType": "EnumValue", + "src": "8618:17:32" + }, + { + "id": 1921, + "name": "TRANSFER_INTERNAL", + "nodeType": "EnumValue", + "src": "8637:17:32" + }, + { + "id": 1922, + "name": "TRANSFER_EXTERNAL", + "nodeType": "EnumValue", + "src": "8656:17:32" + } + ], + "name": "UserBalanceOpKind", + "nodeType": "EnumDefinition", + "src": "8575:100:32" + }, + { + "anonymous": false, + "documentation": { + "id": 1924, + "nodeType": "StructuredDocumentation", + "src": "8681:317:32", + "text": " @dev Emitted when a user's Internal Balance changes, either from calls to `manageUserBalance`, or through\n interacting with Pools using Internal Balance.\n Because Internal Balance works exclusively with ERC20 tokens, ETH deposits and withdrawals will use the WETH\n address." + }, + "id": 1932, + "name": "InternalBalanceChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1931, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1926, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1932, + "src": "9032:20:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1925, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9032:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1928, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1932, + "src": "9054:20:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1927, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "9054:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1930, + "indexed": false, + "mutability": "mutable", + "name": "delta", + "nodeType": "VariableDeclaration", + "scope": 1932, + "src": "9076:12:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 1929, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "9076:6:32", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "9031:58:32" + }, + "src": "9003:87:32" + }, + { + "anonymous": false, + "documentation": { + "id": 1933, + "nodeType": "StructuredDocumentation", + "src": "9096:131:32", + "text": " @dev Emitted when a user's Vault ERC20 allowance is used by the Vault to transfer tokens to an external account." + }, + "id": 1943, + "name": "ExternalBalanceTransfer", + "nodeType": "EventDefinition", + "parameters": { + "id": 1942, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1935, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1943, + "src": "9262:20:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1934, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "9262:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1937, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1943, + "src": "9284:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1936, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9284:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1939, + "indexed": false, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1943, + "src": "9308:17:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1938, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9308:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1941, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1943, + "src": "9327:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1940, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9327:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9261:81:32" + }, + "src": "9232:111:32" + }, + { + "canonicalName": "IVault.PoolSpecialization", + "id": 1947, + "members": [ + { + "id": 1944, + "name": "GENERAL", + "nodeType": "EnumValue", + "src": "10449:7:32" + }, + { + "id": 1945, + "name": "MINIMAL_SWAP_INFO", + "nodeType": "EnumValue", + "src": "10458:17:32" + }, + { + "id": 1946, + "name": "TWO_TOKEN", + "nodeType": "EnumValue", + "src": "10477:9:32" + } + ], + "name": "PoolSpecialization", + "nodeType": "EnumDefinition", + "src": "10423:65:32" + }, + { + "documentation": { + "id": 1948, + "nodeType": "StructuredDocumentation", + "src": "10494:702:32", + "text": " @dev Registers the caller account as a Pool with a given specialization setting. Returns the Pool's ID, which\n is used in all Pool-related functions. Pools cannot be deregistered, nor can the Pool's specialization be\n changed.\n The caller is expected to be a smart contract that implements either `IGeneralPool` or `IMinimalSwapInfoPool`,\n depending on the chosen specialization setting. This contract is known as the Pool's contract.\n Note that the same contract may register itself as multiple Pools with unique Pool IDs, or in other words,\n multiple Pools may share the same contract.\n Emits a `PoolRegistered` event." + }, + "functionSelector": "09b2760f", + "id": 1955, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "registerPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1951, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1950, + "mutability": "mutable", + "name": "specialization", + "nodeType": "VariableDeclaration", + "scope": 1955, + "src": "11223:33:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1947", + "typeString": "enum IVault.PoolSpecialization" + }, + "typeName": { + "id": 1949, + "name": "PoolSpecialization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1947, + "src": "11223:18:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1947", + "typeString": "enum IVault.PoolSpecialization" + } + }, + "visibility": "internal" + } + ], + "src": "11222:35:32" + }, + "returnParameters": { + "id": 1954, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1953, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1955, + "src": "11276:7:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1952, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11276:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "11275:9:32" + }, + "scope": 2288, + "src": "11201:84:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1956, + "nodeType": "StructuredDocumentation", + "src": "11291:84:32", + "text": " @dev Emitted when a Pool is registered by calling `registerPool`." + }, + "id": 1964, + "name": "PoolRegistered", + "nodeType": "EventDefinition", + "parameters": { + "id": 1963, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1958, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1964, + "src": "11401:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1957, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11401:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1960, + "indexed": true, + "mutability": "mutable", + "name": "poolAddress", + "nodeType": "VariableDeclaration", + "scope": 1964, + "src": "11425:27:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1959, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11425:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1962, + "indexed": false, + "mutability": "mutable", + "name": "specialization", + "nodeType": "VariableDeclaration", + "scope": 1964, + "src": "11454:33:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1947", + "typeString": "enum IVault.PoolSpecialization" + }, + "typeName": { + "id": 1961, + "name": "PoolSpecialization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1947, + "src": "11454:18:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1947", + "typeString": "enum IVault.PoolSpecialization" + } + }, + "visibility": "internal" + } + ], + "src": "11400:88:32" + }, + "src": "11380:109:32" + }, + { + "documentation": { + "id": 1965, + "nodeType": "StructuredDocumentation", + "src": "11495:85:32", + "text": " @dev Returns a Pool's contract address and specialization setting." + }, + "functionSelector": "f6c00927", + "id": 1974, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1968, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1967, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1974, + "src": "11602:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1966, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11602:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "11601:16:32" + }, + "returnParameters": { + "id": 1973, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1970, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1974, + "src": "11641:7:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1969, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11641:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1972, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1974, + "src": "11650:18:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1947", + "typeString": "enum IVault.PoolSpecialization" + }, + "typeName": { + "id": 1971, + "name": "PoolSpecialization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1947, + "src": "11650:18:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1947", + "typeString": "enum IVault.PoolSpecialization" + } + }, + "visibility": "internal" + } + ], + "src": "11640:29:32" + }, + "scope": 2288, + "src": "11585:85:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1975, + "nodeType": "StructuredDocumentation", + "src": "11676:1422:32", + "text": " @dev Registers `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n Pools can only interact with tokens they have registered. Users join a Pool by transferring registered tokens,\n exit by receiving registered tokens, and can only swap registered tokens.\n Each token can only be registered once. For Pools with the Two Token specialization, `tokens` must have a length\n of two, that is, both tokens must be registered in the same `registerTokens` call, and they must be sorted in\n ascending order.\n The `tokens` and `assetManagers` arrays must have the same length, and each entry in these indicates the Asset\n Manager for the corresponding token. Asset Managers can manage a Pool's tokens via `managePoolBalance`,\n depositing and withdrawing them directly, and can even set their balance to arbitrary amounts. They are therefore\n expected to be highly secured smart contracts with sound design principles, and the decision to register an\n Asset Manager should not be made lightly.\n Pools can choose not to assign an Asset Manager to a given token by passing in the zero address. Once an Asset\n Manager is set, it cannot be changed except by deregistering the associated token and registering again with a\n different Asset Manager.\n Emits a `TokensRegistered` event." + }, + "functionSelector": "66a9c7d2", + "id": 1986, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "registerTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1984, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1977, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1986, + "src": "13136:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1976, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13136:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1980, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1986, + "src": "13160:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1978, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "13160:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 1979, + "nodeType": "ArrayTypeName", + "src": "13160:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1983, + "mutability": "mutable", + "name": "assetManagers", + "nodeType": "VariableDeclaration", + "scope": 1986, + "src": "13192:30:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 1981, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13192:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1982, + "nodeType": "ArrayTypeName", + "src": "13192:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "13126:102:32" + }, + "returnParameters": { + "id": 1985, + "nodeType": "ParameterList", + "parameters": [], + "src": "13237:0:32" + }, + "scope": 2288, + "src": "13103:135:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1987, + "nodeType": "StructuredDocumentation", + "src": "13244:89:32", + "text": " @dev Emitted when a Pool registers tokens by calling `registerTokens`." + }, + "id": 1997, + "name": "TokensRegistered", + "nodeType": "EventDefinition", + "parameters": { + "id": 1996, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1989, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1997, + "src": "13361:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1988, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13361:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1992, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1997, + "src": "13385:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1990, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "13385:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 1991, + "nodeType": "ArrayTypeName", + "src": "13385:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1995, + "indexed": false, + "mutability": "mutable", + "name": "assetManagers", + "nodeType": "VariableDeclaration", + "scope": 1997, + "src": "13402:23:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 1993, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13402:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1994, + "nodeType": "ArrayTypeName", + "src": "13402:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "13360:66:32" + }, + "src": "13338:89:32" + }, + { + "documentation": { + "id": 1998, + "nodeType": "StructuredDocumentation", + "src": "13433:567:32", + "text": " @dev Deregisters `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n Only registered tokens (via `registerTokens`) can be deregistered. Additionally, they must have zero total\n balance. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens\n must be deregistered in the same `deregisterTokens` call.\n A deregistered token can be re-registered later on, possibly with a different Asset Manager.\n Emits a `TokensDeregistered` event." + }, + "functionSelector": "7d3aeb96", + "id": 2006, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deregisterTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2004, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2000, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "14031:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1999, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14031:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2003, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 2006, + "src": "14047:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2001, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "14047:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 2002, + "nodeType": "ArrayTypeName", + "src": "14047:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "14030:40:32" + }, + "returnParameters": { + "id": 2005, + "nodeType": "ParameterList", + "parameters": [], + "src": "14079:0:32" + }, + "scope": 2288, + "src": "14005:75:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 2007, + "nodeType": "StructuredDocumentation", + "src": "14086:93:32", + "text": " @dev Emitted when a Pool deregisters tokens by calling `deregisterTokens`." + }, + "id": 2014, + "name": "TokensDeregistered", + "nodeType": "EventDefinition", + "parameters": { + "id": 2013, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2009, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "14209:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2008, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14209:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2012, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "14233:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2010, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "14233:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 2011, + "nodeType": "ArrayTypeName", + "src": "14233:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "14208:41:32" + }, + "src": "14184:66:32" + }, + { + "documentation": { + "id": 2015, + "nodeType": "StructuredDocumentation", + "src": "14256:1043:32", + "text": " @dev Returns detailed information for a Pool's registered token.\n `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens\n withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token`\n equals the sum of `cash` and `managed`.\n Internally, `cash` and `managed` are stored using 112 bits. No action can ever cause a Pool's token `cash`,\n `managed` or `total` balance to be greater than 2^112 - 1.\n `lastChangeBlock` is the number of the block in which `token`'s total balance was last modified (via either a\n join, exit, swap, or Asset Manager update). This value is useful to avoid so-called 'sandwich attacks', for\n example when developing price oracles. A change of zero (e.g. caused by a swap with amount zero) is considered a\n change for this purpose, and will update `lastChangeBlock`.\n `assetManager` is the Pool's token Asset Manager." + }, + "functionSelector": "b05f8e48", + "id": 2030, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokenInfo", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2017, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2030, + "src": "15330:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2016, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "15330:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2019, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 2030, + "src": "15346:12:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2018, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "15346:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "15329:30:32" + }, + "returnParameters": { + "id": 2029, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2022, + "mutability": "mutable", + "name": "cash", + "nodeType": "VariableDeclaration", + "scope": 2030, + "src": "15420:12:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2021, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15420:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2024, + "mutability": "mutable", + "name": "managed", + "nodeType": "VariableDeclaration", + "scope": 2030, + "src": "15446:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2023, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15446:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2026, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 2030, + "src": "15475:23:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2025, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15475:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2028, + "mutability": "mutable", + "name": "assetManager", + "nodeType": "VariableDeclaration", + "scope": 2030, + "src": "15512:20:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2027, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15512:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15406:136:32" + }, + "scope": 2288, + "src": "15304:239:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2031, + "nodeType": "StructuredDocumentation", + "src": "15549:828:32", + "text": " @dev Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of\n the tokens' `balances` changed.\n The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all\n Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order.\n If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same\n order as passed to `registerTokens`.\n Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are\n the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo`\n instead." + }, + "functionSelector": "f94d4668", + "id": 2044, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2034, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2033, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2044, + "src": "16405:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2032, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "16405:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "16404:16:32" + }, + "returnParameters": { + "id": 2043, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2037, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 2044, + "src": "16481:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2035, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "16481:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 2036, + "nodeType": "ArrayTypeName", + "src": "16481:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2040, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 2044, + "src": "16517:25:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2038, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16517:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2039, + "nodeType": "ArrayTypeName", + "src": "16517:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2042, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 2044, + "src": "16556:23:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2041, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16556:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16467:122:32" + }, + "scope": 2288, + "src": "16382:208:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2045, + "nodeType": "StructuredDocumentation", + "src": "16596:2304:32", + "text": " @dev Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will\n trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized\n Pool shares.\n If the caller is not `sender`, it must be an authorized relayer for them.\n The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount\n to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces\n these maximums.\n If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable\n this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the\n WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent\n back to the caller (not the sender, which is important for relayers).\n `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be\n sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final\n `assets` array might not be sorted. Pools with no registered tokens cannot be joined.\n If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only\n be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be\n withdrawn from Internal Balance: attempting to do so will trigger a revert.\n This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement\n their own custom logic. This typically requires additional information from the user (such as the expected number\n of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed\n directly to the Pool's contract, as is `recipient`.\n Emits a `PoolBalanceChanged` event." + }, + "functionSelector": "b95cac28", + "id": 2056, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "joinPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2054, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2047, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2056, + "src": "18932:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2046, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "18932:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2049, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 2056, + "src": "18956:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2048, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18956:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2051, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2056, + "src": "18980:17:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2050, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18980:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2053, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 2056, + "src": "19007:30:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_JoinPoolRequest_$2067_memory_ptr", + "typeString": "struct IVault.JoinPoolRequest" + }, + "typeName": { + "id": 2052, + "name": "JoinPoolRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2067, + "src": "19007:15:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_JoinPoolRequest_$2067_storage_ptr", + "typeString": "struct IVault.JoinPoolRequest" + } + }, + "visibility": "internal" + } + ], + "src": "18922:121:32" + }, + "returnParameters": { + "id": 2055, + "nodeType": "ParameterList", + "parameters": [], + "src": "19060:0:32" + }, + "scope": 2288, + "src": "18905:156:32", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.JoinPoolRequest", + "id": 2067, + "members": [ + { + "constant": false, + "id": 2059, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 2067, + "src": "19100:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 2057, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1724, + "src": "19100:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + } + }, + "id": 2058, + "nodeType": "ArrayTypeName", + "src": "19100:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2062, + "mutability": "mutable", + "name": "maxAmountsIn", + "nodeType": "VariableDeclaration", + "scope": 2067, + "src": "19125:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2060, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19125:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2061, + "nodeType": "ArrayTypeName", + "src": "19125:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2064, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 2067, + "src": "19157:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2063, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "19157:5:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2066, + "mutability": "mutable", + "name": "fromInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 2067, + "src": "19181:24:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2065, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19181:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "JoinPoolRequest", + "nodeType": "StructDefinition", + "scope": 2288, + "src": "19067:145:32", + "visibility": "public" + }, + { + "documentation": { + "id": 2068, + "nodeType": "StructuredDocumentation", + "src": "19218:2489:32", + "text": " @dev Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will\n trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized\n Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see\n `getPoolTokenInfo`).\n If the caller is not `sender`, it must be an authorized relayer for them.\n The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum\n token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault:\n it just enforces these minimums.\n If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To\n enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead\n of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit.\n `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must\n be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the\n final `assets` array might not be sorted. Pools with no registered tokens cannot be exited.\n If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise,\n an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to\n do so will trigger a revert.\n `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the\n `tokens` array. This array must match the Pool's registered tokens.\n This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement\n their own custom logic. This typically requires additional information from the user (such as the expected number\n of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and\n passed directly to the Pool's contract.\n Emits a `PoolBalanceChanged` event." + }, + "functionSelector": "8bdb3913", + "id": 2079, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "exitPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2077, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2070, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2079, + "src": "21739:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2069, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "21739:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2072, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 2079, + "src": "21763:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2071, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21763:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2074, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2079, + "src": "21787:25:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 2073, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21787:15:32", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2076, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 2079, + "src": "21822:30:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ExitPoolRequest_$2090_memory_ptr", + "typeString": "struct IVault.ExitPoolRequest" + }, + "typeName": { + "id": 2075, + "name": "ExitPoolRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2090, + "src": "21822:15:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ExitPoolRequest_$2090_storage_ptr", + "typeString": "struct IVault.ExitPoolRequest" + } + }, + "visibility": "internal" + } + ], + "src": "21729:129:32" + }, + "returnParameters": { + "id": 2078, + "nodeType": "ParameterList", + "parameters": [], + "src": "21867:0:32" + }, + "scope": 2288, + "src": "21712:156:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.ExitPoolRequest", + "id": 2090, + "members": [ + { + "constant": false, + "id": 2082, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 2090, + "src": "21907:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 2080, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1724, + "src": "21907:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + } + }, + "id": 2081, + "nodeType": "ArrayTypeName", + "src": "21907:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2085, + "mutability": "mutable", + "name": "minAmountsOut", + "nodeType": "VariableDeclaration", + "scope": 2090, + "src": "21932:23:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2083, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21932:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2084, + "nodeType": "ArrayTypeName", + "src": "21932:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2087, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 2090, + "src": "21965:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2086, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "21965:5:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2089, + "mutability": "mutable", + "name": "toInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 2090, + "src": "21989:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2088, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "21989:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "ExitPoolRequest", + "nodeType": "StructDefinition", + "scope": 2288, + "src": "21874:144:32", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 2091, + "nodeType": "StructuredDocumentation", + "src": "22024:116:32", + "text": " @dev Emitted when a user joins or exits a Pool by calling `joinPool` or `exitPool`, respectively." + }, + "id": 2106, + "name": "PoolBalanceChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 2105, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2093, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2106, + "src": "22179:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2092, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22179:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2095, + "indexed": true, + "mutability": "mutable", + "name": "liquidityProvider", + "nodeType": "VariableDeclaration", + "scope": 2106, + "src": "22211:33:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2094, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22211:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2098, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 2106, + "src": "22254:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2096, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "22254:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 2097, + "nodeType": "ArrayTypeName", + "src": "22254:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2101, + "indexed": false, + "mutability": "mutable", + "name": "deltas", + "nodeType": "VariableDeclaration", + "scope": 2106, + "src": "22279:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 2099, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "22279:6:32", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 2100, + "nodeType": "ArrayTypeName", + "src": "22279:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2104, + "indexed": false, + "mutability": "mutable", + "name": "protocolFeeAmounts", + "nodeType": "VariableDeclaration", + "scope": 2106, + "src": "22304:28:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22304:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2103, + "nodeType": "ArrayTypeName", + "src": "22304:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "22169:169:32" + }, + "src": "22145:194:32" + }, + { + "canonicalName": "IVault.PoolBalanceChangeKind", + "id": 2109, + "members": [ + { + "id": 2107, + "name": "JOIN", + "nodeType": "EnumValue", + "src": "22374:4:32" + }, + { + "id": 2108, + "name": "EXIT", + "nodeType": "EnumValue", + "src": "22380:4:32" + } + ], + "name": "PoolBalanceChangeKind", + "nodeType": "EnumDefinition", + "src": "22345:41:32" + }, + { + "canonicalName": "IVault.SwapKind", + "id": 2112, + "members": [ + { + "id": 2110, + "name": "GIVEN_IN", + "nodeType": "EnumValue", + "src": "25987:8:32" + }, + { + "id": 2111, + "name": "GIVEN_OUT", + "nodeType": "EnumValue", + "src": "25997:9:32" + } + ], + "name": "SwapKind", + "nodeType": "EnumDefinition", + "src": "25971:37:32" + }, + { + "documentation": { + "id": 2113, + "nodeType": "StructuredDocumentation", + "src": "26014:587:32", + "text": " @dev Performs a swap with a single Pool.\n If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens\n taken from the Pool, which must be greater than or equal to `limit`.\n If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens\n sent to the Pool, which must be less than or equal to `limit`.\n Internal Balance usage and the recipient are determined by the `funds` struct.\n Emits a `Swap` event." + }, + "functionSelector": "52bbbe29", + "id": 2126, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "swap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2122, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2115, + "mutability": "mutable", + "name": "singleSwap", + "nodeType": "VariableDeclaration", + "scope": 2126, + "src": "26629:28:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SingleSwap_$2139_memory_ptr", + "typeString": "struct IVault.SingleSwap" + }, + "typeName": { + "id": 2114, + "name": "SingleSwap", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2139, + "src": "26629:10:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SingleSwap_$2139_storage_ptr", + "typeString": "struct IVault.SingleSwap" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2117, + "mutability": "mutable", + "name": "funds", + "nodeType": "VariableDeclaration", + "scope": 2126, + "src": "26667:27:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$2194_memory_ptr", + "typeString": "struct IVault.FundManagement" + }, + "typeName": { + "id": 2116, + "name": "FundManagement", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2194, + "src": "26667:14:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$2194_storage_ptr", + "typeString": "struct IVault.FundManagement" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2119, + "mutability": "mutable", + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 2126, + "src": "26704:13:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2118, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26704:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2121, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 2126, + "src": "26727:16:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2120, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26727:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26619:130:32" + }, + "returnParameters": { + "id": 2125, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2124, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2126, + "src": "26776:7:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2123, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26776:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26775:9:32" + }, + "scope": 2288, + "src": "26606:179:32", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.SingleSwap", + "id": 2139, + "members": [ + { + "constant": false, + "id": 2128, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2139, + "src": "27369:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2127, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "27369:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2130, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 2139, + "src": "27393:13:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2112", + "typeString": "enum IVault.SwapKind" + }, + "typeName": { + "id": 2129, + "name": "SwapKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2112, + "src": "27393:8:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2112", + "typeString": "enum IVault.SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2132, + "mutability": "mutable", + "name": "assetIn", + "nodeType": "VariableDeclaration", + "scope": 2139, + "src": "27416:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + }, + "typeName": { + "id": 2131, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1724, + "src": "27416:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2134, + "mutability": "mutable", + "name": "assetOut", + "nodeType": "VariableDeclaration", + "scope": 2139, + "src": "27440:15:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + }, + "typeName": { + "id": 2133, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1724, + "src": "27440:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2136, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2139, + "src": "27465:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2135, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27465:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2138, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 2139, + "src": "27489:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2137, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "27489:5:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "SingleSwap", + "nodeType": "StructDefinition", + "scope": 2288, + "src": "27341:169:32", + "visibility": "public" + }, + { + "documentation": { + "id": 2140, + "nodeType": "StructuredDocumentation", + "src": "27516:1980:32", + "text": " @dev Performs a series of swaps with one or multiple Pools. In each individual swap, the caller determines either\n the amount of tokens sent to or received from the Pool, depending on the `kind` value.\n Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the\n Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at\n the same index in the `assets` array.\n Swaps are executed sequentially, in the order specified by the `swaps` array. Each array element describes a\n Pool, the token to be sent to this Pool, the token to receive from it, and an amount that is either `amountIn` or\n `amountOut` depending on the swap kind.\n Multihop swaps can be executed by passing an `amount` value of zero for a swap. This will cause the amount in/out\n of the previous swap to be used as the amount in for the current one. In a 'given in' swap, 'tokenIn' must equal\n the previous swap's `tokenOut`. For a 'given out' swap, `tokenOut` must equal the previous swap's `tokenIn`.\n The `assets` array contains the addresses of all assets involved in the swaps. These are either token addresses,\n or the IAsset sentinel value for ETH (the zero address). Each entry in the `swaps` array specifies tokens in and\n out by referencing an index in `assets`. Note that Pools never interact with ETH directly: it will be wrapped to\n or unwrapped from WETH by the Vault.\n Internal Balance usage, sender, and recipient are determined by the `funds` struct. The `limits` array specifies\n the minimum or maximum amount of each token the vault is allowed to transfer.\n `batchSwap` can be used to make a single swap, like `swap` does, but doing so requires more gas than the\n equivalent `swap` call.\n Emits `Swap` events." + }, + "functionSelector": "945bcec9", + "id": 2161, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "batchSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2156, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2142, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 2161, + "src": "29529:13:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2112", + "typeString": "enum IVault.SwapKind" + }, + "typeName": { + "id": 2141, + "name": "SwapKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2112, + "src": "29529:8:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2112", + "typeString": "enum IVault.SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2145, + "mutability": "mutable", + "name": "swaps", + "nodeType": "VariableDeclaration", + "scope": 2161, + "src": "29552:28:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$2172_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + }, + "typeName": { + "baseType": { + "id": 2143, + "name": "BatchSwapStep", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2172, + "src": "29552:13:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BatchSwapStep_$2172_storage_ptr", + "typeString": "struct IVault.BatchSwapStep" + } + }, + "id": 2144, + "nodeType": "ArrayTypeName", + "src": "29552:15:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$2172_storage_$dyn_storage_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2148, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 2161, + "src": "29590:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_memory_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 2146, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1724, + "src": "29590:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + } + }, + "id": 2147, + "nodeType": "ArrayTypeName", + "src": "29590:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2150, + "mutability": "mutable", + "name": "funds", + "nodeType": "VariableDeclaration", + "scope": 2161, + "src": "29622:27:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$2194_memory_ptr", + "typeString": "struct IVault.FundManagement" + }, + "typeName": { + "id": 2149, + "name": "FundManagement", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2194, + "src": "29622:14:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$2194_storage_ptr", + "typeString": "struct IVault.FundManagement" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2153, + "mutability": "mutable", + "name": "limits", + "nodeType": "VariableDeclaration", + "scope": 2161, + "src": "29659:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 2151, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "29659:6:32", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 2152, + "nodeType": "ArrayTypeName", + "src": "29659:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2155, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 2161, + "src": "29691:16:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2154, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29691:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "29519:194:32" + }, + "returnParameters": { + "id": 2160, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2159, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2161, + "src": "29740:15:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 2157, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "29740:6:32", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 2158, + "nodeType": "ArrayTypeName", + "src": "29740:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + } + ], + "src": "29739:17:32" + }, + "scope": 2288, + "src": "29501:256:32", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.BatchSwapStep", + "id": 2172, + "members": [ + { + "constant": false, + "id": 2163, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2172, + "src": "30350:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2162, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "30350:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2165, + "mutability": "mutable", + "name": "assetInIndex", + "nodeType": "VariableDeclaration", + "scope": 2172, + "src": "30374:20:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2164, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30374:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2167, + "mutability": "mutable", + "name": "assetOutIndex", + "nodeType": "VariableDeclaration", + "scope": 2172, + "src": "30404:21:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2166, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30404:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2169, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2172, + "src": "30435:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2168, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30435:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2171, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 2172, + "src": "30459:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2170, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "30459:5:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "BatchSwapStep", + "nodeType": "StructDefinition", + "scope": 2288, + "src": "30319:161:32", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 2173, + "nodeType": "StructuredDocumentation", + "src": "30486:92:32", + "text": " @dev Emitted for each individual swap performed by `swap` or `batchSwap`." + }, + "id": 2185, + "name": "Swap", + "nodeType": "EventDefinition", + "parameters": { + "id": 2184, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2175, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2185, + "src": "30603:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2174, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "30603:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2177, + "indexed": true, + "mutability": "mutable", + "name": "tokenIn", + "nodeType": "VariableDeclaration", + "scope": 2185, + "src": "30635:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2176, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "30635:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2179, + "indexed": true, + "mutability": "mutable", + "name": "tokenOut", + "nodeType": "VariableDeclaration", + "scope": 2185, + "src": "30667:23:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2178, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "30667:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2181, + "indexed": false, + "mutability": "mutable", + "name": "amountIn", + "nodeType": "VariableDeclaration", + "scope": 2185, + "src": "30700:16:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2180, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30700:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2183, + "indexed": false, + "mutability": "mutable", + "name": "amountOut", + "nodeType": "VariableDeclaration", + "scope": 2185, + "src": "30726:17:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2182, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30726:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "30593:156:32" + }, + "src": "30583:167:32" + }, + { + "canonicalName": "IVault.FundManagement", + "id": 2194, + "members": [ + { + "constant": false, + "id": 2187, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 2194, + "src": "31713:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2186, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "31713:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2189, + "mutability": "mutable", + "name": "fromInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 2194, + "src": "31737:24:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2188, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "31737:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2191, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2194, + "src": "31771:25:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 2190, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "31771:15:32", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2193, + "mutability": "mutable", + "name": "toInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 2194, + "src": "31806:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2192, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "31806:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "FundManagement", + "nodeType": "StructDefinition", + "scope": 2288, + "src": "31681:154:32", + "visibility": "public" + }, + { + "documentation": { + "id": 2195, + "nodeType": "StructuredDocumentation", + "src": "31841:1027:32", + "text": " @dev Simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be\n simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result.\n Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH)\n the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it\n receives are the same that an equivalent `batchSwap` call would receive.\n Unlike `batchSwap`, this function performs no checks on the sender or recipient field in the `funds` struct.\n This makes it suitable to be called by off-chain applications via eth_call without needing to hold tokens,\n approve them for the Vault, or even know a user's address.\n Note that this function is not 'view' (due to implementation details): the client code must explicitly execute\n eth_call instead of eth_sendTransaction." + }, + "functionSelector": "f84d066e", + "id": 2211, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "queryBatchSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2197, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 2211, + "src": "32906:13:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2112", + "typeString": "enum IVault.SwapKind" + }, + "typeName": { + "id": 2196, + "name": "SwapKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2112, + "src": "32906:8:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2112", + "typeString": "enum IVault.SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2200, + "mutability": "mutable", + "name": "swaps", + "nodeType": "VariableDeclaration", + "scope": 2211, + "src": "32929:28:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$2172_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + }, + "typeName": { + "baseType": { + "id": 2198, + "name": "BatchSwapStep", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2172, + "src": "32929:13:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BatchSwapStep_$2172_storage_ptr", + "typeString": "struct IVault.BatchSwapStep" + } + }, + "id": 2199, + "nodeType": "ArrayTypeName", + "src": "32929:15:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$2172_storage_$dyn_storage_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2203, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 2211, + "src": "32967:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_memory_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 2201, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1724, + "src": "32967:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1724", + "typeString": "contract IAsset" + } + }, + "id": 2202, + "nodeType": "ArrayTypeName", + "src": "32967:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1724_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2205, + "mutability": "mutable", + "name": "funds", + "nodeType": "VariableDeclaration", + "scope": 2211, + "src": "32999:27:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$2194_memory_ptr", + "typeString": "struct IVault.FundManagement" + }, + "typeName": { + "id": 2204, + "name": "FundManagement", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2194, + "src": "32999:14:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$2194_storage_ptr", + "typeString": "struct IVault.FundManagement" + } + }, + "visibility": "internal" + } + ], + "src": "32896:136:32" + }, + "returnParameters": { + "id": 2210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2209, + "mutability": "mutable", + "name": "assetDeltas", + "nodeType": "VariableDeclaration", + "scope": 2211, + "src": "33051:27:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 2207, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "33051:6:32", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 2208, + "nodeType": "ArrayTypeName", + "src": "33051:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + } + ], + "src": "33050:29:32" + }, + "scope": 2288, + "src": "32873:207:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2212, + "nodeType": "StructuredDocumentation", + "src": "33106:604:32", + "text": " @dev Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it,\n and then reverting unless the tokens plus a proportional protocol fee have been returned.\n The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount\n for each token contract. `tokens` must be sorted in ascending order.\n The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the\n `receiveFlashLoan` call.\n Emits `FlashLoan` events." + }, + "functionSelector": "5c38449e", + "id": 2225, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "flashLoan", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2223, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2214, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2225, + "src": "33743:29:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1758", + "typeString": "contract IFlashLoanRecipient" + }, + "typeName": { + "id": 2213, + "name": "IFlashLoanRecipient", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1758, + "src": "33743:19:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1758", + "typeString": "contract IFlashLoanRecipient" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2217, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 2225, + "src": "33782:22:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2215, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "33782:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 2216, + "nodeType": "ArrayTypeName", + "src": "33782:8:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2220, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 2225, + "src": "33814:24:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2218, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33814:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2219, + "nodeType": "ArrayTypeName", + "src": "33814:9:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2222, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 2225, + "src": "33848:21:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2221, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "33848:5:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "33733:142:32" + }, + "returnParameters": { + "id": 2224, + "nodeType": "ParameterList", + "parameters": [], + "src": "33884:0:32" + }, + "scope": 2288, + "src": "33715:170:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 2226, + "nodeType": "StructuredDocumentation", + "src": "33891:88:32", + "text": " @dev Emitted for each individual flash loan performed by `flashLoan`." + }, + "id": 2236, + "name": "FlashLoan", + "nodeType": "EventDefinition", + "parameters": { + "id": 2235, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2228, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2236, + "src": "34000:37:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1758", + "typeString": "contract IFlashLoanRecipient" + }, + "typeName": { + "id": 2227, + "name": "IFlashLoanRecipient", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1758, + "src": "34000:19:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1758", + "typeString": "contract IFlashLoanRecipient" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2230, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 2236, + "src": "34039:20:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2229, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "34039:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2232, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2236, + "src": "34061:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2231, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34061:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2234, + "indexed": false, + "mutability": "mutable", + "name": "feeAmount", + "nodeType": "VariableDeclaration", + "scope": 2236, + "src": "34077:17:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2233, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34077:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "33999:96:32" + }, + "src": "33984:112:32" + }, + { + "documentation": { + "id": 2237, + "nodeType": "StructuredDocumentation", + "src": "35092:434:32", + "text": " @dev Performs a set of Pool balance operations, which may be either withdrawals, deposits or updates.\n Pool Balance management features batching, which means a single contract call can be used to perform multiple\n operations of different kinds, with different Pools and tokens, at once.\n For each operation, the caller must be registered as the Asset Manager for `token` in `poolId`." + }, + "functionSelector": "e6c46092", + "id": 2243, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "managePoolBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2241, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2240, + "mutability": "mutable", + "name": "ops", + "nodeType": "VariableDeclaration", + "scope": 2243, + "src": "35558:26:32", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolBalanceOp_$2252_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.PoolBalanceOp[]" + }, + "typeName": { + "baseType": { + "id": 2238, + "name": "PoolBalanceOp", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2252, + "src": "35558:13:32", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolBalanceOp_$2252_storage_ptr", + "typeString": "struct IVault.PoolBalanceOp" + } + }, + "id": 2239, + "nodeType": "ArrayTypeName", + "src": "35558:15:32", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolBalanceOp_$2252_storage_$dyn_storage_ptr", + "typeString": "struct IVault.PoolBalanceOp[]" + } + }, + "visibility": "internal" + } + ], + "src": "35557:28:32" + }, + "returnParameters": { + "id": 2242, + "nodeType": "ParameterList", + "parameters": [], + "src": "35594:0:32" + }, + "scope": 2288, + "src": "35531:64:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.PoolBalanceOp", + "id": 2252, + "members": [ + { + "constant": false, + "id": 2245, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 2252, + "src": "35632:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolBalanceOpKind_$2256", + "typeString": "enum IVault.PoolBalanceOpKind" + }, + "typeName": { + "id": 2244, + "name": "PoolBalanceOpKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2256, + "src": "35632:17:32", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolBalanceOpKind_$2256", + "typeString": "enum IVault.PoolBalanceOpKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2247, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2252, + "src": "35664:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2246, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "35664:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2249, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 2252, + "src": "35688:12:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2248, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "35688:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2251, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2252, + "src": "35710:14:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2250, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35710:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "PoolBalanceOp", + "nodeType": "StructDefinition", + "scope": 2288, + "src": "35601:130:32", + "visibility": "public" + }, + { + "canonicalName": "IVault.PoolBalanceOpKind", + "id": 2256, + "members": [ + { + "id": 2253, + "name": "WITHDRAW", + "nodeType": "EnumValue", + "src": "36253:8:32" + }, + { + "id": 2254, + "name": "DEPOSIT", + "nodeType": "EnumValue", + "src": "36263:7:32" + }, + { + "id": 2255, + "name": "UPDATE", + "nodeType": "EnumValue", + "src": "36272:6:32" + } + ], + "name": "PoolBalanceOpKind", + "nodeType": "EnumDefinition", + "src": "36228:52:32" + }, + { + "anonymous": false, + "documentation": { + "id": 2257, + "nodeType": "StructuredDocumentation", + "src": "36286:109:32", + "text": " @dev Emitted when a Pool's token Asset Manager alters its balance via `managePoolBalance`." + }, + "id": 2269, + "name": "PoolBalanceManaged", + "nodeType": "EventDefinition", + "parameters": { + "id": 2268, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2259, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2269, + "src": "36434:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2258, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "36434:7:32", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2261, + "indexed": true, + "mutability": "mutable", + "name": "assetManager", + "nodeType": "VariableDeclaration", + "scope": 2269, + "src": "36466:28:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2260, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "36466:7:32", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2263, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 2269, + "src": "36504:20:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2262, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "36504:6:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2265, + "indexed": false, + "mutability": "mutable", + "name": "cashDelta", + "nodeType": "VariableDeclaration", + "scope": 2269, + "src": "36534:16:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2264, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "36534:6:32", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2267, + "indexed": false, + "mutability": "mutable", + "name": "managedDelta", + "nodeType": "VariableDeclaration", + "scope": 2269, + "src": "36560:19:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2266, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "36560:6:32", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "36424:161:32" + }, + "src": "36400:186:32" + }, + { + "documentation": { + "id": 2270, + "nodeType": "StructuredDocumentation", + "src": "37463:64:32", + "text": " @dev Returns the current protocol fee module." + }, + "functionSelector": "d2946c2b", + "id": 2275, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getProtocolFeesCollector", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2271, + "nodeType": "ParameterList", + "parameters": [], + "src": "37565:2:32" + }, + "returnParameters": { + "id": 2274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2273, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2275, + "src": "37591:22:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1823", + "typeString": "contract IProtocolFeesCollector" + }, + "typeName": { + "id": 2272, + "name": "IProtocolFeesCollector", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1823, + "src": "37591:22:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1823", + "typeString": "contract IProtocolFeesCollector" + } + }, + "visibility": "internal" + } + ], + "src": "37590:24:32" + }, + "scope": 2288, + "src": "37532:83:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2276, + "nodeType": "StructuredDocumentation", + "src": "37621:635:32", + "text": " @dev Safety mechanism to pause most Vault operations in the event of an emergency - typically detection of an\n error in some part of the system.\n The Vault can only be paused during an initial time period, after which pausing is forever disabled.\n While the contract is paused, the following features are disabled:\n - depositing and transferring internal balance\n - transferring external balance (using the Vault's allowance)\n - swaps\n - joining Pools\n - Asset Manager interactions\n Internal Balance can still be withdrawn, and Pools exited." + }, + "functionSelector": "16c38b3c", + "id": 2281, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPaused", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2278, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 2281, + "src": "38280:11:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2277, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "38280:4:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "38279:13:32" + }, + "returnParameters": { + "id": 2280, + "nodeType": "ParameterList", + "parameters": [], + "src": "38301:0:32" + }, + "scope": 2288, + "src": "38261:41:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2282, + "nodeType": "StructuredDocumentation", + "src": "38308:58:32", + "text": " @dev Returns the Vault's WETH instance." + }, + "functionSelector": "ad5c4648", + "id": 2287, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "WETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2283, + "nodeType": "ParameterList", + "parameters": [], + "src": "38384:2:32" + }, + "returnParameters": { + "id": 2286, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2285, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2287, + "src": "38410:5:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IWETH_$1572", + "typeString": "contract IWETH" + }, + "typeName": { + "id": 2284, + "name": "IWETH", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1572, + "src": "38410:5:32", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IWETH_$1572", + "typeString": "contract IWETH" + } + }, + "visibility": "internal" + } + ], + "src": "38409:7:32" + }, + "scope": 2288, + "src": "38371:46:32", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2289, + "src": "1321:37155:32" + } + ], + "src": "688:37789:32" + }, + "id": 32 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "exportedSymbols": { + "Authentication": [ + 2365 + ] + }, + "id": 2366, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2290, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:33" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 2291, + "nodeType": "ImportDirective", + "scope": 2366, + "sourceUnit": 1510, + "src": "713:90:33", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "id": 2292, + "nodeType": "ImportDirective", + "scope": 2366, + "sourceUnit": 1521, + "src": "804:91:33", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 2294, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1520, + "src": "1327:15:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1520", + "typeString": "contract IAuthentication" + } + }, + "id": 2295, + "nodeType": "InheritanceSpecifier", + "src": "1327:15:33" + } + ], + "contractDependencies": [ + 1520 + ], + "contractKind": "contract", + "documentation": { + "id": 2293, + "nodeType": "StructuredDocumentation", + "src": "897:393:33", + "text": " @dev Building block for performing access control on external functions.\n This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied\n to external functions to only make them callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic." + }, + "fullyImplemented": false, + "id": 2365, + "linearizedBaseContracts": [ + 2365, + 1520 + ], + "name": "Authentication", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 2297, + "mutability": "immutable", + "name": "_actionIdDisambiguator", + "nodeType": "VariableDeclaration", + "scope": 2365, + "src": "1349:48:33", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2296, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1349:7:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 2307, + "nodeType": "Block", + "src": "2039:63:33", + "statements": [ + { + "expression": { + "id": 2305, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2303, + "name": "_actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2297, + "src": "2049:22:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 2304, + "name": "actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2300, + "src": "2074:21:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2049:46:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2306, + "nodeType": "ExpressionStatement", + "src": "2049:46:33" + } + ] + }, + "documentation": { + "id": 2298, + "nodeType": "StructuredDocumentation", + "src": "1404:587:33", + "text": " @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead." + }, + "id": 2308, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2300, + "mutability": "mutable", + "name": "actionIdDisambiguator", + "nodeType": "VariableDeclaration", + "scope": 2308, + "src": "2008:29:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2299, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2008:7:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2007:31:33" + }, + "returnParameters": { + "id": 2302, + "nodeType": "ParameterList", + "parameters": [], + "src": "2039:0:33" + }, + "scope": 2365, + "src": "1996:106:33", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2315, + "nodeType": "Block", + "src": "2266:49:33", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2311, + "name": "_authenticateCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2338, + "src": "2276:19:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 2312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2276:21:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2313, + "nodeType": "ExpressionStatement", + "src": "2276:21:33" + }, + { + "id": 2314, + "nodeType": "PlaceholderStatement", + "src": "2307:1:33" + } + ] + }, + "documentation": { + "id": 2309, + "nodeType": "StructuredDocumentation", + "src": "2108:129:33", + "text": " @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions." + }, + "id": 2316, + "name": "authenticate", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 2310, + "nodeType": "ParameterList", + "parameters": [], + "src": "2263:2:33" + }, + "src": "2242:73:33", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2337, + "nodeType": "Block", + "src": "2465:136:33", + "statements": [ + { + "assignments": [ + 2321 + ], + "declarations": [ + { + "constant": false, + "id": 2321, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 2337, + "src": "2475:16:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2320, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2475:7:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 2326, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 2323, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2506:3:33", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sig", + "nodeType": "MemberAccess", + "src": "2506:7:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 2322, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2355, + "src": "2494:11:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 2325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2494:20:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2475:39:33" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 2329, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2321, + "src": "2545:8:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 2330, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2555:3:33", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2555:10:33", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 2328, + "name": "_canPerform", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2364, + "src": "2533:11:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 2332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2533:33:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2333, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2568:6:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SENDER_NOT_ALLOWED", + "nodeType": "MemberAccess", + "referencedDeclaration": 1307, + "src": "2568:25:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2327, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2524:8:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2524:70:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2336, + "nodeType": "ExpressionStatement", + "src": "2524:70:33" + } + ] + }, + "documentation": { + "id": 2317, + "nodeType": "StructuredDocumentation", + "src": "2321:94:33", + "text": " @dev Reverts unless the caller is allowed to call the entry point function." + }, + "id": 2338, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_authenticateCaller", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2318, + "nodeType": "ParameterList", + "parameters": [], + "src": "2448:2:33" + }, + "returnParameters": { + "id": 2319, + "nodeType": "ParameterList", + "parameters": [], + "src": "2465:0:33" + }, + "scope": 2365, + "src": "2420:181:33", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1519 + ], + "body": { + "id": 2354, + "nodeType": "Block", + "src": "2684:353:33", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 2349, + "name": "_actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2297, + "src": "2996:22:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2350, + "name": "selector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2340, + "src": "3020:8:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "expression": { + "id": 2347, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2979:3:33", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 2348, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "2979:16:33", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 2351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2979:50:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 2346, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2969:9:33", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 2352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2969:61:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 2345, + "id": 2353, + "nodeType": "Return", + "src": "2962:68:33" + } + ] + }, + "functionSelector": "851c1bb3", + "id": 2355, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getActionId", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2342, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2657:8:33" + }, + "parameters": { + "id": 2341, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2340, + "mutability": "mutable", + "name": "selector", + "nodeType": "VariableDeclaration", + "scope": 2355, + "src": "2628:15:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 2339, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "2628:6:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "2627:17:33" + }, + "returnParameters": { + "id": 2345, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2344, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2355, + "src": "2675:7:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2343, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2675:7:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2674:9:33" + }, + "scope": 2365, + "src": "2607:430:33", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 2364, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2357, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 2364, + "src": "3064:16:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2356, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3064:7:33", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2359, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 2364, + "src": "3082:12:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2358, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3082:7:33", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3063:32:33" + }, + "returnParameters": { + "id": 2363, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2362, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2364, + "src": "3127:4:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2361, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3127:4:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3126:6:33" + }, + "scope": 2365, + "src": "3043:90:33", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 2366, + "src": "1291:1844:33" + } + ], + "src": "688:2448:33" + }, + "id": 33 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "exportedSymbols": { + "InputHelpers": [ + 2477 + ] + }, + "id": 2478, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2367, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:34" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 2368, + "nodeType": "ImportDirective", + "scope": 2478, + "sourceUnit": 1651, + "src": "713:87:34", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 2369, + "nodeType": "ImportDirective", + "scope": 2478, + "sourceUnit": 1510, + "src": "801:90:34", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 2477, + "linearizedBaseContracts": [ + 2477 + ], + "name": "InputHelpers", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 2384, + "nodeType": "Block", + "src": "988:63:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2377, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2371, + "src": "1007:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 2378, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2373, + "src": "1012:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1007:6:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2380, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1015:6:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INPUT_LENGTH_MISMATCH", + "nodeType": "MemberAccess", + "referencedDeclaration": 1103, + "src": "1015:28:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2376, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "998:8:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "998:46:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2383, + "nodeType": "ExpressionStatement", + "src": "998:46:34" + } + ] + }, + "id": 2385, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureInputLengthMatch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2374, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2371, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2385, + "src": "952:9:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "952:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2373, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2385, + "src": "963:9:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2372, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "963:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "951:22:34" + }, + "returnParameters": { + "id": 2375, + "nodeType": "ParameterList", + "parameters": [], + "src": "988:0:34" + }, + "scope": 2477, + "src": "920:131:34", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2406, + "nodeType": "Block", + "src": "1166:73:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2395, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2387, + "src": "1185:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 2396, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2389, + "src": "1190:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1185:6:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2398, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2389, + "src": "1195:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 2399, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2391, + "src": "1200:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1195:6:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1185:16:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2402, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1203:6:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INPUT_LENGTH_MISMATCH", + "nodeType": "MemberAccess", + "referencedDeclaration": 1103, + "src": "1203:28:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2394, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "1176:8:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1176:56:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2405, + "nodeType": "ExpressionStatement", + "src": "1176:56:34" + } + ] + }, + "id": 2407, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureInputLengthMatch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2392, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2387, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2407, + "src": "1098:9:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2386, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1098:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2389, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2407, + "src": "1117:9:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2388, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1117:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2391, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 2407, + "src": "1136:9:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1136:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1088:63:34" + }, + "returnParameters": { + "id": 2393, + "nodeType": "ParameterList", + "parameters": [], + "src": "1166:0:34" + }, + "scope": 2477, + "src": "1057:182:34", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2424, + "nodeType": "Block", + "src": "1311:208:34", + "statements": [ + { + "assignments": [ + 2417 + ], + "declarations": [ + { + "constant": false, + "id": 2417, + "mutability": "mutable", + "name": "addressArray", + "nodeType": "VariableDeclaration", + "scope": 2424, + "src": "1321:29:34", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 2415, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1321:7:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2416, + "nodeType": "ArrayTypeName", + "src": "1321:9:34", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "id": 2418, + "nodeType": "VariableDeclarationStatement", + "src": "1321:29:34" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "1425:45:34", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1439:21:34", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1455:5:34" + }, + "variableNames": [ + { + "name": "addressArray", + "nodeType": "YulIdentifier", + "src": "1439:12:34" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 2417, + "isOffset": false, + "isSlot": false, + "src": "1439:12:34", + "valueSize": 1 + }, + { + "declaration": 2410, + "isOffset": false, + "isSlot": false, + "src": "1455:5:34", + "valueSize": 1 + } + ], + "id": 2419, + "nodeType": "InlineAssembly", + "src": "1416:54:34" + }, + { + "expression": { + "arguments": [ + { + "id": 2421, + "name": "addressArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2417, + "src": "1499:12:34", + "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" + } + ], + "id": 2420, + "name": "ensureArrayIsSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 2425, + 2476 + ], + "referencedDeclaration": 2476, + "src": "1479:19:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$__$", + "typeString": "function (address[] memory) pure" + } + }, + "id": 2422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1479:33:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2423, + "nodeType": "ExpressionStatement", + "src": "1479:33:34" + } + ] + }, + "id": 2425, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureArrayIsSorted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2410, + "mutability": "mutable", + "name": "array", + "nodeType": "VariableDeclaration", + "scope": 2425, + "src": "1274:21:34", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2408, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1274:6:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 2409, + "nodeType": "ArrayTypeName", + "src": "1274:8:34", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "1273:23:34" + }, + "returnParameters": { + "id": 2412, + "nodeType": "ParameterList", + "parameters": [], + "src": "1311:0:34" + }, + "scope": 2477, + "src": "1245:274:34", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2475, + "nodeType": "Block", + "src": "1592:307:34", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2431, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2428, + "src": "1606:5:34", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 2432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1606:12:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "32", + "id": 2433, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1621:1:34", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "1606:16:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2437, + "nodeType": "IfStatement", + "src": "1602:53:34", + "trueBody": { + "id": 2436, + "nodeType": "Block", + "src": "1624:31:34", + "statements": [ + { + "functionReturnParameters": 2430, + "id": 2435, + "nodeType": "Return", + "src": "1638:7:34" + } + ] + } + }, + { + "assignments": [ + 2439 + ], + "declarations": [ + { + "constant": false, + "id": 2439, + "mutability": "mutable", + "name": "previous", + "nodeType": "VariableDeclaration", + "scope": 2475, + "src": "1665:16:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2438, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1665:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 2443, + "initialValue": { + "baseExpression": { + "id": 2440, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2428, + "src": "1684:5:34", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 2442, + "indexExpression": { + "hexValue": "30", + "id": 2441, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1690:1:34", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1684:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1665:27:34" + }, + { + "body": { + "id": 2473, + "nodeType": "Block", + "src": "1745:148:34", + "statements": [ + { + "assignments": [ + 2456 + ], + "declarations": [ + { + "constant": false, + "id": 2456, + "mutability": "mutable", + "name": "current", + "nodeType": "VariableDeclaration", + "scope": 2473, + "src": "1759:15:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2455, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1759:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 2460, + "initialValue": { + "baseExpression": { + "id": 2457, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2428, + "src": "1777:5:34", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 2459, + "indexExpression": { + "id": 2458, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2445, + "src": "1783:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1777:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1759:26:34" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2462, + "name": "previous", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2439, + "src": "1808:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 2463, + "name": "current", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2456, + "src": "1819:7:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1808:18:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2465, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1828:6:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNSORTED_ARRAY", + "nodeType": "MemberAccess", + "referencedDeclaration": 1097, + "src": "1828:21:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2461, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "1799:8:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1799:51:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2468, + "nodeType": "ExpressionStatement", + "src": "1799:51:34" + }, + { + "expression": { + "id": 2471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2469, + "name": "previous", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2439, + "src": "1864:8:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 2470, + "name": "current", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2456, + "src": "1875:7:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1864:18:34", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2472, + "nodeType": "ExpressionStatement", + "src": "1864:18:34" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2451, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2448, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2445, + "src": "1722:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 2449, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2428, + "src": "1726:5:34", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 2450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1726:12:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1722:16:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2474, + "initializationExpression": { + "assignments": [ + 2445 + ], + "declarations": [ + { + "constant": false, + "id": 2445, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 2474, + "src": "1707:9:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2444, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1707:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2447, + "initialValue": { + "hexValue": "31", + "id": 2446, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1719:1:34", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1707:13:34" + }, + "loopExpression": { + "expression": { + "id": 2453, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "1740:3:34", + "subExpression": { + "id": 2452, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2445, + "src": "1742:1:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2454, + "nodeType": "ExpressionStatement", + "src": "1740:3:34" + }, + "nodeType": "ForStatement", + "src": "1702:191:34" + } + ] + }, + "id": 2476, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureArrayIsSorted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2429, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2428, + "mutability": "mutable", + "name": "array", + "nodeType": "VariableDeclaration", + "scope": 2476, + "src": "1554:22:34", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 2426, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1554:7:34", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2427, + "nodeType": "ArrayTypeName", + "src": "1554:9:34", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "1553:24:34" + }, + "returnParameters": { + "id": 2430, + "nodeType": "ParameterList", + "parameters": [], + "src": "1592:0:34" + }, + "scope": 2477, + "src": "1525:374:34", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 2478, + "src": "893:1008:34" + } + ], + "src": "688:1214:34" + }, + "id": 34 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "exportedSymbols": { + "SingletonAuthentication": [ + 2572 + ] + }, + "id": 2573, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2479, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:35" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "id": 2480, + "nodeType": "ImportDirective", + "scope": 2573, + "sourceUnit": 29, + "src": "713:88:35", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 2481, + "nodeType": "ImportDirective", + "scope": 2573, + "sourceUnit": 2289, + "src": "802:65:35", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "file": "./Authentication.sol", + "id": 2482, + "nodeType": "ImportDirective", + "scope": 2573, + "sourceUnit": 2366, + "src": "869:30:35", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 2483, + "name": "Authentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2365, + "src": "946:14:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Authentication_$2365", + "typeString": "contract Authentication" + } + }, + "id": 2484, + "nodeType": "InheritanceSpecifier", + "src": "946:14:35" + } + ], + "contractDependencies": [ + 1520, + 2365 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 2572, + "linearizedBaseContracts": [ + 2572, + 2365, + 1520 + ], + "name": "SingletonAuthentication", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 2486, + "mutability": "immutable", + "name": "_vault", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "967:31:35", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2485, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "967:6:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 2507, + "nodeType": "Block", + "src": "1152:31:35", + "statements": [ + { + "expression": { + "id": 2505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2503, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2486, + "src": "1162:6:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 2504, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2488, + "src": "1171:5:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "src": "1162:14:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "id": 2506, + "nodeType": "ExpressionStatement", + "src": "1162:14:35" + } + ] + }, + "id": 2508, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 2497, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1143:4:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + ], + "id": 2496, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1135:7:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2495, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1135:7:35", + "typeDescriptions": {} + } + }, + "id": 2498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1135:13:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2494, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1127:7:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 2493, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1127:7:35", + "typeDescriptions": {} + } + }, + "id": 2499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1127:22:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2492, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1119:7:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 2491, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1119:7:35", + "typeDescriptions": {} + } + }, + "id": 2500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1119:31:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 2501, + "modifierName": { + "id": 2490, + "name": "Authentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "1104:14:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Authentication_$2365_$", + "typeString": "type(contract Authentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1104:47:35" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2489, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2488, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 2508, + "src": "1090:12:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2487, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1090:6:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1089:14:35" + }, + "returnParameters": { + "id": 2502, + "nodeType": "ParameterList", + "parameters": [], + "src": "1152:0:35" + }, + "scope": 2572, + "src": "1078:105:35", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2516, + "nodeType": "Block", + "src": "1296:30:35", + "statements": [ + { + "expression": { + "id": 2514, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2486, + "src": "1313:6:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "functionReturnParameters": 2513, + "id": 2515, + "nodeType": "Return", + "src": "1306:13:35" + } + ] + }, + "documentation": { + "id": 2509, + "nodeType": "StructuredDocumentation", + "src": "1189:53:35", + "text": " @notice Returns the Balancer Vault" + }, + "functionSelector": "8d928af8", + "id": 2517, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2510, + "nodeType": "ParameterList", + "parameters": [], + "src": "1264:2:35" + }, + "returnParameters": { + "id": 2513, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2512, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2517, + "src": "1288:6:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2511, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1288:6:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1287:8:35" + }, + "scope": 2572, + "src": "1247:79:35", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2528, + "nodeType": "Block", + "src": "1445:50:35", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2523, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2517, + "src": "1462:8:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2288_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 2524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1462:10:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "id": 2525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getAuthorizer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1848, + "src": "1462:24:35", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1739_$", + "typeString": "function () view external returns (contract IAuthorizer)" + } + }, + "id": 2526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1462:26:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "functionReturnParameters": 2522, + "id": 2527, + "nodeType": "Return", + "src": "1455:33:35" + } + ] + }, + "documentation": { + "id": 2518, + "nodeType": "StructuredDocumentation", + "src": "1332:49:35", + "text": " @notice Returns the Authorizer" + }, + "functionSelector": "aaabadc5", + "id": 2529, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2519, + "nodeType": "ParameterList", + "parameters": [], + "src": "1408:2:35" + }, + "returnParameters": { + "id": 2522, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2521, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2529, + "src": "1432:11:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 2520, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1739, + "src": "1432:11:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1431:13:35" + }, + "scope": 2572, + "src": "1386:109:35", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2364 + ], + "body": { + "id": 2550, + "nodeType": "Block", + "src": "1595:84:35", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2542, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2531, + "src": "1639:8:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2543, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2533, + "src": "1649:7:35", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 2546, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1666:4:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + ], + "id": 2545, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1658:7:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2544, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1658:7:35", + "typeDescriptions": {} + } + }, + "id": 2547, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1658:13:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2539, + "name": "getAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2529, + "src": "1612:13:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$1739_$", + "typeString": "function () view returns (contract IAuthorizer)" + } + }, + "id": 2540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1612:15:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "id": 2541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "canPerform", + "nodeType": "MemberAccess", + "referencedDeclaration": 1738, + "src": "1612:26:35", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address,address) view external returns (bool)" + } + }, + "id": 2548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1612:60:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 2538, + "id": 2549, + "nodeType": "Return", + "src": "1605:67:35" + } + ] + }, + "id": 2551, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2535, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1571:8:35" + }, + "parameters": { + "id": 2534, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2531, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 2551, + "src": "1522:16:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2530, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1522:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2533, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 2551, + "src": "1540:15:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2532, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1540:7:35", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1521:35:35" + }, + "returnParameters": { + "id": 2538, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2537, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2551, + "src": "1589:4:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2536, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1589:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1588:6:35" + }, + "scope": 2572, + "src": "1501:178:35", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2570, + "nodeType": "Block", + "src": "1815:76:35", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2565, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2553, + "src": "1859:8:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2566, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2555, + "src": "1869:7:35", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2567, + "name": "where", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2557, + "src": "1878:5:35", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2562, + "name": "getAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2529, + "src": "1832:13:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$1739_$", + "typeString": "function () view returns (contract IAuthorizer)" + } + }, + "id": 2563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1832:15:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "id": 2564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "canPerform", + "nodeType": "MemberAccess", + "referencedDeclaration": 1738, + "src": "1832:26:35", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address,address) view external returns (bool)" + } + }, + "id": 2568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1832:52:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 2561, + "id": 2569, + "nodeType": "Return", + "src": "1825:59:35" + } + ] + }, + "id": 2571, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2558, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2553, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 2571, + "src": "1715:16:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2552, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1715:7:35", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2555, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 2571, + "src": "1741:15:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2554, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1741:7:35", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2557, + "mutability": "mutable", + "name": "where", + "nodeType": "VariableDeclaration", + "scope": 2571, + "src": "1766:13:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2556, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1766:7:35", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1705:80:35" + }, + "returnParameters": { + "id": 2561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2560, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2571, + "src": "1809:4:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2559, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1809:4:35", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1808:6:35" + }, + "scope": 2572, + "src": "1685:206:35", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 2573, + "src": "901:992:35" + } + ], + "src": "688:1206:35" + }, + "id": 35 + }, + "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "exportedSymbols": { + "Math": [ + 2884 + ] + }, + "id": 2885, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2574, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:36" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 2575, + "nodeType": "ImportDirective", + "scope": 2885, + "sourceUnit": 1510, + "src": "58:90:36", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 2576, + "nodeType": "StructuredDocumentation", + "src": "150:139:36", + "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow checks.\n Adapted from OpenZeppelin's SafeMath library." + }, + "fullyImplemented": true, + "id": 2884, + "linearizedBaseContracts": [ + 2884 + ], + "name": "Math", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 2598, + "nodeType": "Block", + "src": "440:56:36", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2584, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2579, + "src": "457:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 2585, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "461:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "457:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 2594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "486:2:36", + "subExpression": { + "id": 2593, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2579, + "src": "487:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 2592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "478:7:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 2591, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "478:7:36", + "typeDescriptions": {} + } + }, + "id": 2595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "478:11:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "457:32:36", + "trueExpression": { + "arguments": [ + { + "id": 2589, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2579, + "src": "473:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 2588, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "465:7:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 2587, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "465:7:36", + "typeDescriptions": {} + } + }, + "id": 2590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "465:10:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2583, + "id": 2597, + "nodeType": "Return", + "src": "450:39:36" + } + ] + }, + "documentation": { + "id": 2577, + "nodeType": "StructuredDocumentation", + "src": "309:71:36", + "text": " @dev Returns the absolute value of a signed integer." + }, + "id": 2599, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "abs", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2580, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2579, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2599, + "src": "398:8:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2578, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "398:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "397:10:36" + }, + "returnParameters": { + "id": 2583, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2582, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2599, + "src": "431:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2581, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "431:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "430:9:36" + }, + "scope": 2884, + "src": "385:111:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2625, + "nodeType": "Block", + "src": "679:99:36", + "statements": [ + { + "assignments": [ + 2610 + ], + "declarations": [ + { + "constant": false, + "id": 2610, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 2625, + "src": "689:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2609, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "689:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2614, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2611, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2602, + "src": "701:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 2612, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2604, + "src": "705:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "701:5:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "689:17:36" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2616, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2610, + "src": "725:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 2617, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2602, + "src": "730:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "725:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2619, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "733:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADD_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 1064, + "src": "733:19:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2615, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "716:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "716:37:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2622, + "nodeType": "ExpressionStatement", + "src": "716:37:36" + }, + { + "expression": { + "id": 2623, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2610, + "src": "770:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2608, + "id": 2624, + "nodeType": "Return", + "src": "763:8:36" + } + ] + }, + "documentation": { + "id": 2600, + "nodeType": "StructuredDocumentation", + "src": "502:105:36", + "text": " @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow." + }, + "id": 2626, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2605, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2602, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2626, + "src": "625:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2601, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "625:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2604, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2626, + "src": "636:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2603, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "636:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "624:22:36" + }, + "returnParameters": { + "id": 2608, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2607, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2626, + "src": "670:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2606, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "670:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "669:9:36" + }, + "scope": 2884, + "src": "612:166:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2666, + "nodeType": "Block", + "src": "944:130:36", + "statements": [ + { + "assignments": [ + 2637 + ], + "declarations": [ + { + "constant": false, + "id": 2637, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 2666, + "src": "954:8:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2636, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "954:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 2641, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2638, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2629, + "src": "965:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 2639, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2631, + "src": "969:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "965:5:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "954:16:36" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2643, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2631, + "src": "990:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 2644, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "995:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "990:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2646, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2637, + "src": "1000:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 2647, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2629, + "src": "1005:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1000:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "990:16:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2650, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "989:18:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2657, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2651, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2631, + "src": "1012:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "30", + "id": 2652, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1016:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1012:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2656, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2654, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2637, + "src": "1021:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 2655, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2629, + "src": "1025:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1021:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1012:14:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2658, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1011:16:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "989:38:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2660, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1029:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADD_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 1064, + "src": "1029:19:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2642, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "980:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "980:69:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2663, + "nodeType": "ExpressionStatement", + "src": "980:69:36" + }, + { + "expression": { + "id": 2664, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2637, + "src": "1066:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 2635, + "id": 2665, + "nodeType": "Return", + "src": "1059:8:36" + } + ] + }, + "documentation": { + "id": 2627, + "nodeType": "StructuredDocumentation", + "src": "784:91:36", + "text": " @dev Returns the addition of two signed integers, reverting on overflow." + }, + "id": 2667, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2632, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2629, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2667, + "src": "893:8:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2628, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "893:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2631, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2667, + "src": "903:8:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2630, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "903:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "892:20:36" + }, + "returnParameters": { + "id": 2635, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2634, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2667, + "src": "936:6:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2633, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "936:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "935:8:36" + }, + "scope": 2884, + "src": "880:194:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2693, + "nodeType": "Block", + "src": "1260:99:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2678, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2672, + "src": "1279:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 2679, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2670, + "src": "1284:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1279:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2681, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1287:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SUB_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 1067, + "src": "1287:19:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2677, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "1270:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1270:37:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2684, + "nodeType": "ExpressionStatement", + "src": "1270:37:36" + }, + { + "assignments": [ + 2686 + ], + "declarations": [ + { + "constant": false, + "id": 2686, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 2693, + "src": "1317:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2685, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1317:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2690, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2687, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2670, + "src": "1329:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 2688, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2672, + "src": "1333:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1329:5:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1317:17:36" + }, + { + "expression": { + "id": 2691, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2686, + "src": "1351:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2676, + "id": 2692, + "nodeType": "Return", + "src": "1344:8:36" + } + ] + }, + "documentation": { + "id": 2668, + "nodeType": "StructuredDocumentation", + "src": "1080:108:36", + "text": " @dev Returns the subtraction of two unsigned integers of 256 bits, reverting on overflow." + }, + "id": 2694, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2673, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2670, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2694, + "src": "1206:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2669, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1206:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2672, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2694, + "src": "1217:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2671, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1217:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1205:22:36" + }, + "returnParameters": { + "id": 2676, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2675, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2694, + "src": "1251:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2674, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1251:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1250:9:36" + }, + "scope": 2884, + "src": "1193:166:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2734, + "nodeType": "Block", + "src": "1528:130:36", + "statements": [ + { + "assignments": [ + 2705 + ], + "declarations": [ + { + "constant": false, + "id": 2705, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 2734, + "src": "1538:8:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2704, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1538:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 2709, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2706, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2697, + "src": "1549:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 2707, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2699, + "src": "1553:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1549:5:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1538:16:36" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2711, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2699, + "src": "1574:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 2712, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1579:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1574:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2714, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2705, + "src": "1584:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 2715, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2697, + "src": "1589:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1584:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1574:16:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2718, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1573:18:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2719, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2699, + "src": "1596:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "30", + "id": 2720, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1600:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1596:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2722, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2705, + "src": "1605:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 2723, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2697, + "src": "1609:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1605:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1596:14:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2726, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1595:16:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1573:38:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2728, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1613:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SUB_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 1067, + "src": "1613:19:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2710, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "1564:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1564:69:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2731, + "nodeType": "ExpressionStatement", + "src": "1564:69:36" + }, + { + "expression": { + "id": 2732, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2705, + "src": "1650:1:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 2703, + "id": 2733, + "nodeType": "Return", + "src": "1643:8:36" + } + ] + }, + "documentation": { + "id": 2695, + "nodeType": "StructuredDocumentation", + "src": "1365:94:36", + "text": " @dev Returns the subtraction of two signed integers, reverting on overflow." + }, + "id": 2735, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2700, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2697, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2735, + "src": "1477:8:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2696, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1477:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2699, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2735, + "src": "1487:8:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2698, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1487:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "1476:20:36" + }, + "returnParameters": { + "id": 2703, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2702, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2735, + "src": "1520:6:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2701, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1520:6:36", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "1519:8:36" + }, + "scope": 2884, + "src": "1464:194:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2752, + "nodeType": "Block", + "src": "1807:38:36", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2745, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2738, + "src": "1824:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 2746, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2740, + "src": "1829:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1824:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 2749, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2740, + "src": "1837:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1824:14:36", + "trueExpression": { + "id": 2748, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2738, + "src": "1833:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2744, + "id": 2751, + "nodeType": "Return", + "src": "1817:21:36" + } + ] + }, + "documentation": { + "id": 2736, + "nodeType": "StructuredDocumentation", + "src": "1664:71:36", + "text": " @dev Returns the largest of two numbers of 256 bits." + }, + "id": 2753, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "max", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2741, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2738, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2753, + "src": "1753:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2737, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1753:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2740, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2753, + "src": "1764:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2739, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1764:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1752:22:36" + }, + "returnParameters": { + "id": 2744, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2743, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2753, + "src": "1798:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2742, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1798:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1797:9:36" + }, + "scope": 2884, + "src": "1740:105:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2770, + "nodeType": "Block", + "src": "1995:37:36", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2763, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2756, + "src": "2012:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 2764, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2758, + "src": "2016:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2012:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 2767, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2758, + "src": "2024:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "2012:13:36", + "trueExpression": { + "id": 2766, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2756, + "src": "2020:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2762, + "id": 2769, + "nodeType": "Return", + "src": "2005:20:36" + } + ] + }, + "documentation": { + "id": 2754, + "nodeType": "StructuredDocumentation", + "src": "1851:72:36", + "text": " @dev Returns the smallest of two numbers of 256 bits." + }, + "id": 2771, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "min", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2759, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2756, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2771, + "src": "1941:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2755, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1941:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2758, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2771, + "src": "1952:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2757, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1952:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1940:22:36" + }, + "returnParameters": { + "id": 2762, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2761, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2771, + "src": "1986:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2760, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1986:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1985:9:36" + }, + "scope": 2884, + "src": "1928:104:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2802, + "nodeType": "Block", + "src": "2105:113:36", + "statements": [ + { + "assignments": [ + 2781 + ], + "declarations": [ + { + "constant": false, + "id": 2781, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 2802, + "src": "2115:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2780, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2115:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2785, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2782, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "2127:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 2783, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2775, + "src": "2131:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2127:5:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2115:17:36" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2787, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "2151:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 2788, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2156:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2151:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2790, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2781, + "src": "2161:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 2791, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "2165:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2161:5:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 2793, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2775, + "src": "2170:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2161:10:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2151:20:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2796, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2173:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MUL_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 1073, + "src": "2173:19:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2786, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2142:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2142:51:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2799, + "nodeType": "ExpressionStatement", + "src": "2142:51:36" + }, + { + "expression": { + "id": 2800, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2781, + "src": "2210:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2779, + "id": 2801, + "nodeType": "Return", + "src": "2203:8:36" + } + ] + }, + "id": 2803, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mul", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2776, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2773, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2803, + "src": "2051:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2772, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2051:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2775, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2803, + "src": "2062:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2774, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2062:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2050:22:36" + }, + "returnParameters": { + "id": 2779, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2778, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2803, + "src": "2096:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2777, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2096:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2095:9:36" + }, + "scope": 2884, + "src": "2038:180:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2825, + "nodeType": "Block", + "src": "2335:61:36", + "statements": [ + { + "expression": { + "condition": { + "id": 2814, + "name": "roundUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2809, + "src": "2352:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 2820, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2805, + "src": "2384:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2821, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2807, + "src": "2387:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2819, + "name": "divDown", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2848, + "src": "2376:7:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2822, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2376:13:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2823, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "2352:37:36", + "trueExpression": { + "arguments": [ + { + "id": 2816, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2805, + "src": "2368:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2817, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2807, + "src": "2371:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2815, + "name": "divUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2883, + "src": "2362:5:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2362:11:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2813, + "id": 2824, + "nodeType": "Return", + "src": "2345:44:36" + } + ] + }, + "id": 2826, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "div", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2810, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2805, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2826, + "src": "2246:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2804, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2246:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2807, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2826, + "src": "2265:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2806, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2265:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2809, + "mutability": "mutable", + "name": "roundUp", + "nodeType": "VariableDeclaration", + "scope": 2826, + "src": "2284:12:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2808, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2284:4:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2236:66:36" + }, + "returnParameters": { + "id": 2813, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2812, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2826, + "src": "2326:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2811, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2326:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2325:9:36" + }, + "scope": 2884, + "src": "2224:172:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2847, + "nodeType": "Block", + "src": "2473:77:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2836, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2830, + "src": "2492:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 2837, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2497:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2492:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2839, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2500:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2840, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ZERO_DIVISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 1076, + "src": "2500:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2835, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2483:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2483:38:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2842, + "nodeType": "ExpressionStatement", + "src": "2483:38:36" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2845, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2843, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2828, + "src": "2538:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 2844, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2830, + "src": "2542:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2538:5:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2834, + "id": 2846, + "nodeType": "Return", + "src": "2531:12:36" + } + ] + }, + "id": 2848, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "divDown", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2831, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2828, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2848, + "src": "2419:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2827, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2419:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2830, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2848, + "src": "2430:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2829, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2430:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2418:22:36" + }, + "returnParameters": { + "id": 2834, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2833, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2848, + "src": "2464:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2832, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2464:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2463:9:36" + }, + "scope": 2884, + "src": "2402:148:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2882, + "nodeType": "Block", + "src": "2625:163:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2858, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2852, + "src": "2644:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 2859, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2649:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2644:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2861, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2652:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2862, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ZERO_DIVISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 1076, + "src": "2652:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2857, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2635:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2635:38:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2864, + "nodeType": "ExpressionStatement", + "src": "2635:38:36" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2867, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2865, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2850, + "src": "2688:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 2866, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2693:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2688:6:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 2880, + "nodeType": "Block", + "src": "2735:47:36", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2878, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 2871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2756:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2872, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2850, + "src": "2761:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 2873, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2765:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2761:5:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 2875, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2760:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 2876, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2852, + "src": "2770:1:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2760:11:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2756:15:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2856, + "id": 2879, + "nodeType": "Return", + "src": "2749:22:36" + } + ] + }, + "id": 2881, + "nodeType": "IfStatement", + "src": "2684:98:36", + "trueBody": { + "id": 2870, + "nodeType": "Block", + "src": "2696:33:36", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 2868, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2717:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 2856, + "id": 2869, + "nodeType": "Return", + "src": "2710:8:36" + } + ] + } + } + ] + }, + "id": 2883, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "divUp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2853, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2850, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 2883, + "src": "2571:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2849, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2571:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2852, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 2883, + "src": "2582:9:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2582:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2570:22:36" + }, + "returnParameters": { + "id": 2856, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2855, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2883, + "src": "2616:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2854, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2616:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2615:9:36" + }, + "scope": 2884, + "src": "2556:232:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 2885, + "src": "290:2500:36" + } + ], + "src": "33:2758:36" + }, + "id": 36 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol", + "exportedSymbols": { + "Address": [ + 3051 + ] + }, + "id": 3052, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2886, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "254:23:37" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 2887, + "nodeType": "ImportDirective", + "scope": 3052, + "sourceUnit": 1510, + "src": "279:90:37", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 2888, + "nodeType": "StructuredDocumentation", + "src": "371:67:37", + "text": " @dev Collection of functions related to the address type" + }, + "fullyImplemented": true, + "id": 3051, + "linearizedBaseContracts": [ + 3051 + ], + "name": "Address", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 2904, + "nodeType": "Block", + "src": "1097:367:37", + "statements": [ + { + "assignments": [ + 2897 + ], + "declarations": [ + { + "constant": false, + "id": 2897, + "mutability": "mutable", + "name": "size", + "nodeType": "VariableDeclaration", + "scope": 2904, + "src": "1294:12:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2896, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1294:7:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2898, + "nodeType": "VariableDeclarationStatement", + "src": "1294:12:37" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "1381:52:37", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1395:28:37", + "value": { + "arguments": [ + { + "name": "account", + "nodeType": "YulIdentifier", + "src": "1415:7:37" + } + ], + "functionName": { + "name": "extcodesize", + "nodeType": "YulIdentifier", + "src": "1403:11:37" + }, + "nodeType": "YulFunctionCall", + "src": "1403:20:37" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "1395:4:37" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 2891, + "isOffset": false, + "isSlot": false, + "src": "1415:7:37", + "valueSize": 1 + }, + { + "declaration": 2897, + "isOffset": false, + "isSlot": false, + "src": "1395:4:37", + "valueSize": 1 + } + ], + "id": 2899, + "nodeType": "InlineAssembly", + "src": "1372:61:37" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2900, + "name": "size", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2897, + "src": "1449:4:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 2901, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1456:1:37", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1449:8:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 2895, + "id": 2903, + "nodeType": "Return", + "src": "1442:15:37" + } + ] + }, + "documentation": { + "id": 2889, + "nodeType": "StructuredDocumentation", + "src": "461:565:37", + "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 ====" + }, + "id": 2905, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isContract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2892, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2891, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 2905, + "src": "1051:15:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2890, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1051:7:37", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1050:17:37" + }, + "returnParameters": { + "id": 2895, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2894, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2905, + "src": "1091:4:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2893, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1091:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1090:6:37" + }, + "scope": 3051, + "src": "1031:433:37", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2940, + "nodeType": "Block", + "src": "2492:298:37", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 2916, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2519:4:37", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Address_$3051", + "typeString": "library Address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Address_$3051", + "typeString": "library Address" + } + ], + "id": 2915, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2511:7:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2914, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2511:7:37", + "typeDescriptions": {} + } + }, + "id": 2917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2511:13:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balance", + "nodeType": "MemberAccess", + "src": "2511:21:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 2919, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2910, + "src": "2536:6:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2511:31:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2921, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2544:6:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADDRESS_INSUFFICIENT_BALANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 1361, + "src": "2544:35:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2913, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2502:8:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2502:78:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2924, + "nodeType": "ExpressionStatement", + "src": "2502:78:37" + }, + { + "assignments": [ + 2926, + null + ], + "declarations": [ + { + "constant": false, + "id": 2926, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 2940, + "src": "2669:12:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2925, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2669:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 2933, + "initialValue": { + "arguments": [ + { + "hexValue": "", + "id": 2931, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2719:2:37", + "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": 2927, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2908, + "src": "2687:9:37", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 2928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "2687:14:37", + "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": 2930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 2929, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2910, + "src": "2710:6:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "2687:31:37", + "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": 2932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2687:35:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2668:54:37" + }, + { + "expression": { + "arguments": [ + { + "id": 2935, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2926, + "src": "2741:7:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2936, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2750:6:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 2937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADDRESS_CANNOT_SEND_VALUE", + "nodeType": "MemberAccess", + "referencedDeclaration": 1364, + "src": "2750:32:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2934, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2732:8:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2938, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2732:51:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2939, + "nodeType": "ExpressionStatement", + "src": "2732:51:37" + } + ] + }, + "documentation": { + "id": 2906, + "nodeType": "StructuredDocumentation", + "src": "1510:906:37", + "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": 2941, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sendValue", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2911, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2908, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2941, + "src": "2440:25:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 2907, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2440:15:37", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2910, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2941, + "src": "2467:14:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2909, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2467:7:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2439:43:37" + }, + "returnParameters": { + "id": 2912, + "nodeType": "ParameterList", + "parameters": [], + "src": "2492:0:37" + }, + "scope": 3051, + "src": "2421:369:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2965, + "nodeType": "Block", + "src": "3583:189:37", + "statements": [ + { + "assignments": [ + 2952, + 2954 + ], + "declarations": [ + { + "constant": false, + "id": 2952, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 2965, + "src": "3653:12:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2951, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3653:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2954, + "mutability": "mutable", + "name": "returndata", + "nodeType": "VariableDeclaration", + "scope": 2965, + "src": "3667:23:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2953, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3667:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 2959, + "initialValue": { + "arguments": [ + { + "id": 2957, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2946, + "src": "3706:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 2955, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2944, + "src": "3694:6:37", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "3694:11:37", + "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": 2958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3694:17:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3652:59:37" + }, + { + "expression": { + "arguments": [ + { + "id": 2961, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2952, + "src": "3745:7:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 2962, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2954, + "src": "3754:10:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 2960, + "name": "verifyCallResult", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3050, + "src": "3728:16:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bool,bytes memory) pure returns (bytes memory)" + } + }, + "id": 2963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3728:37:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 2950, + "id": 2964, + "nodeType": "Return", + "src": "3721:44:37" + } + ] + }, + "documentation": { + "id": 2942, + "nodeType": "StructuredDocumentation", + "src": "2796:693:37", + "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 - calling `target` with `data` must not revert.\n _Available since v3.1._" + }, + "id": 2966, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "functionCall", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2947, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2944, + "mutability": "mutable", + "name": "target", + "nodeType": "VariableDeclaration", + "scope": 2966, + "src": "3516:14:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2943, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3516:7:37", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2946, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 2966, + "src": "3532:17:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2945, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3532:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3515:35:37" + }, + "returnParameters": { + "id": 2950, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2949, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2966, + "src": "3569:12:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2948, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3569:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3568:14:37" + }, + "scope": 3051, + "src": "3494:278:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2994, + "nodeType": "Block", + "src": "4155:205:37", + "statements": [ + { + "assignments": [ + 2979, + 2981 + ], + "declarations": [ + { + "constant": false, + "id": 2979, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 2994, + "src": "4225:12:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2978, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4225:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2981, + "mutability": "mutable", + "name": "returndata", + "nodeType": "VariableDeclaration", + "scope": 2994, + "src": "4239:23:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2980, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4239:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 2988, + "initialValue": { + "arguments": [ + { + "id": 2986, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2971, + "src": "4294:4:37", + "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": 2982, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2969, + "src": "4266:6:37", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "4266:11:37", + "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": 2985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 2984, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2973, + "src": "4286:5:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "4266:27:37", + "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": 2987, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4266:33:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4224:75:37" + }, + { + "expression": { + "arguments": [ + { + "id": 2990, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2979, + "src": "4333:7:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 2991, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2981, + "src": "4342:10:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 2989, + "name": "verifyCallResult", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3050, + "src": "4316:16:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bool,bytes memory) pure returns (bytes memory)" + } + }, + "id": 2992, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4316:37:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 2977, + "id": 2993, + "nodeType": "Return", + "src": "4309:44:37" + } + ] + }, + "documentation": { + "id": 2967, + "nodeType": "StructuredDocumentation", + "src": "3817:190:37", + "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but passing some native ETH as msg.value to the call.\n _Available since v3.4._" + }, + "id": 2995, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "functionCallWithValue", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2974, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2969, + "mutability": "mutable", + "name": "target", + "nodeType": "VariableDeclaration", + "scope": 2995, + "src": "4052:14:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2968, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4052:7:37", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2971, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 2995, + "src": "4076:17:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2970, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4076:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2973, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 2995, + "src": "4103:13:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2972, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4103:7:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4042:80:37" + }, + "returnParameters": { + "id": 2977, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2976, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2995, + "src": "4141:12:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2975, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4141:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4140:14:37" + }, + "scope": 3051, + "src": "4012:348:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3019, + "nodeType": "Block", + "src": "4636:197:37", + "statements": [ + { + "assignments": [ + 3006, + 3008 + ], + "declarations": [ + { + "constant": false, + "id": 3006, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 3019, + "src": "4706:12:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3005, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4706:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3008, + "mutability": "mutable", + "name": "returndata", + "nodeType": "VariableDeclaration", + "scope": 3019, + "src": "4720:23:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3007, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4720:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 3013, + "initialValue": { + "arguments": [ + { + "id": 3011, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3000, + "src": "4767:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 3009, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2998, + "src": "4747:6:37", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 3010, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "delegatecall", + "nodeType": "MemberAccess", + "src": "4747:19:37", + "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": 3012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4747:25:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4705:67:37" + }, + { + "expression": { + "arguments": [ + { + "id": 3015, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3006, + "src": "4806:7:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 3016, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3008, + "src": "4815:10:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3014, + "name": "verifyCallResult", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3050, + "src": "4789:16:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bool,bytes memory) pure returns (bytes memory)" + } + }, + "id": 3017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4789:37:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 3004, + "id": 3018, + "nodeType": "Return", + "src": "4782:44:37" + } + ] + }, + "documentation": { + "id": 2996, + "nodeType": "StructuredDocumentation", + "src": "4366:168:37", + "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._" + }, + "id": 3020, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "functionDelegateCall", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3001, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2998, + "mutability": "mutable", + "name": "target", + "nodeType": "VariableDeclaration", + "scope": 3020, + "src": "4569:14:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2997, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4569:7:37", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3000, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 3020, + "src": "4585:17:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2999, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4585:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4568:35:37" + }, + "returnParameters": { + "id": 3004, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3003, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3020, + "src": "4622:12:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3002, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4622:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4621:14:37" + }, + "scope": 3051, + "src": "4539:294:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3049, + "nodeType": "Block", + "src": "5159:612:37", + "statements": [ + { + "condition": { + "id": 3030, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3023, + "src": "5173:7:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 3047, + "nodeType": "Block", + "src": "5230:535:37", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3034, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3025, + "src": "5314:10:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 3035, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5314:17:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 3036, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5334:1:37", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5314:21:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 3045, + "nodeType": "Block", + "src": "5685:70:37", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3041, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "5711:6:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "LOW_LEVEL_CALL_FAILED", + "nodeType": "MemberAccess", + "referencedDeclaration": 1394, + "src": "5711:28:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3040, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1061, + "src": "5703:7:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 3043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5703:37:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3044, + "nodeType": "ExpressionStatement", + "src": "5703:37:37" + } + ] + }, + "id": 3046, + "nodeType": "IfStatement", + "src": "5310:445:37", + "trueBody": { + "id": 3039, + "nodeType": "Block", + "src": "5337:342:37", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "5520:145:37", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5542:40:37", + "value": { + "arguments": [ + { + "name": "returndata", + "nodeType": "YulIdentifier", + "src": "5571:10:37" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5565:5:37" + }, + "nodeType": "YulFunctionCall", + "src": "5565:17:37" + }, + "variables": [ + { + "name": "returndata_size", + "nodeType": "YulTypedName", + "src": "5546:15:37", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5614:2:37", + "type": "", + "value": "32" + }, + { + "name": "returndata", + "nodeType": "YulIdentifier", + "src": "5618:10:37" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5610:3:37" + }, + "nodeType": "YulFunctionCall", + "src": "5610:19:37" + }, + { + "name": "returndata_size", + "nodeType": "YulIdentifier", + "src": "5631:15:37" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5603:6:37" + }, + "nodeType": "YulFunctionCall", + "src": "5603:44:37" + }, + "nodeType": "YulExpressionStatement", + "src": "5603:44:37" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 3025, + "isOffset": false, + "isSlot": false, + "src": "5571:10:37", + "valueSize": 1 + }, + { + "declaration": 3025, + "isOffset": false, + "isSlot": false, + "src": "5618:10:37", + "valueSize": 1 + } + ], + "id": 3038, + "nodeType": "InlineAssembly", + "src": "5511:154:37" + } + ] + } + } + ] + }, + "id": 3048, + "nodeType": "IfStatement", + "src": "5169:596:37", + "trueBody": { + "id": 3033, + "nodeType": "Block", + "src": "5182:42:37", + "statements": [ + { + "expression": { + "id": 3031, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3025, + "src": "5203:10:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 3029, + "id": 3032, + "nodeType": "Return", + "src": "5196:17:37" + } + ] + } + } + ] + }, + "documentation": { + "id": 3021, + "nodeType": "StructuredDocumentation", + "src": "4839:213:37", + "text": " @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling up the\n revert reason or using the one provided.\n _Available since v4.3._" + }, + "id": 3050, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "verifyCallResult", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3026, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3023, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 3050, + "src": "5083:12:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3022, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5083:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3025, + "mutability": "mutable", + "name": "returndata", + "nodeType": "VariableDeclaration", + "scope": 3050, + "src": "5097:23:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3024, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5097:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5082:39:37" + }, + "returnParameters": { + "id": 3029, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3028, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3050, + "src": "5145:12:37", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3027, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5145:5:37", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5144:14:37" + }, + "scope": 3051, + "src": "5057:714:37", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 3052, + "src": "439:5334:37" + } + ], + "src": "254:5520:37" + }, + "id": 37 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "exportedSymbols": { + "Clones": [ + 3131 + ] + }, + "id": 3132, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3053, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "85:23:38" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 3054, + "nodeType": "StructuredDocumentation", + "src": "110:629:38", + "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": 3131, + "linearizedBaseContracts": [ + 3131 + ], + "name": "Clones", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 3073, + "nodeType": "Block", + "src": "1076:440:38", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "1095:348:38", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1109:22:38", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1126:4:38", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1120:5:38" + }, + "nodeType": "YulFunctionCall", + "src": "1120:11:38" + }, + "variables": [ + { + "name": "ptr", + "nodeType": "YulTypedName", + "src": "1113:3:38", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "1151:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1156:66:38", + "type": "", + "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1144:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "1144:79:38" + }, + "nodeType": "YulExpressionStatement", + "src": "1144:79:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "1247:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1252:4:38", + "type": "", + "value": "0x14" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1243:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "1243:14:38" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1263:4:38", + "type": "", + "value": "0x60" + }, + { + "name": "implementation", + "nodeType": "YulIdentifier", + "src": "1269:14:38" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "1259:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "1259:25:38" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1236:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "1236:49:38" + }, + "nodeType": "YulExpressionStatement", + "src": "1236:49:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "1309:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1314:4:38", + "type": "", + "value": "0x28" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1305:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "1305:14:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1321:66:38", + "type": "", + "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1298:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "1298:90:38" + }, + "nodeType": "YulExpressionStatement", + "src": "1298:90:38" + }, + { + "nodeType": "YulAssignment", + "src": "1401:32:38", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1420:1:38", + "type": "", + "value": "0" + }, + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "1423:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1428:4:38", + "type": "", + "value": "0x37" + } + ], + "functionName": { + "name": "create", + "nodeType": "YulIdentifier", + "src": "1413:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "1413:20:38" + }, + "variableNames": [ + { + "name": "instance", + "nodeType": "YulIdentifier", + "src": "1401:8:38" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 3057, + "isOffset": false, + "isSlot": false, + "src": "1269:14:38", + "valueSize": 1 + }, + { + "declaration": 3060, + "isOffset": false, + "isSlot": false, + "src": "1401:8:38", + "valueSize": 1 + } + ], + "id": 3062, + "nodeType": "InlineAssembly", + "src": "1086:357:38" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3069, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3064, + "name": "instance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3060, + "src": "1460:8:38", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3067, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1480: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": 3066, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1472:7:38", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3065, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1472:7:38", + "typeDescriptions": {} + } + }, + "id": 3068, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1472:10:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "1460:22:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "455243313136373a20637265617465206661696c6564", + "id": 3070, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1484:24:38", + "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": 3063, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1452:7:38", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1452:57:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3072, + "nodeType": "ExpressionStatement", + "src": "1452:57:38" + } + ] + }, + "documentation": { + "id": 3055, + "nodeType": "StructuredDocumentation", + "src": "804:192:38", + "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": 3074, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "clone", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3058, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3057, + "mutability": "mutable", + "name": "implementation", + "nodeType": "VariableDeclaration", + "scope": 3074, + "src": "1016:22:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3056, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1016:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1015:24:38" + }, + "returnParameters": { + "id": 3061, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3060, + "mutability": "mutable", + "name": "instance", + "nodeType": "VariableDeclaration", + "scope": 3074, + "src": "1058:16:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3059, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1058:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1057:18:38" + }, + "scope": 3131, + "src": "1001:515:38", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3095, + "nodeType": "Block", + "src": "1993:448:38", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "2012:355:38", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2026:22:38", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2043:4:38", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2037:5:38" + }, + "nodeType": "YulFunctionCall", + "src": "2037:11:38" + }, + "variables": [ + { + "name": "ptr", + "nodeType": "YulTypedName", + "src": "2030:3:38", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "2068:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2073:66:38", + "type": "", + "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2061:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "2061:79:38" + }, + "nodeType": "YulExpressionStatement", + "src": "2061:79:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "2164:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2169:4:38", + "type": "", + "value": "0x14" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2160:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "2160:14:38" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2180:4:38", + "type": "", + "value": "0x60" + }, + { + "name": "implementation", + "nodeType": "YulIdentifier", + "src": "2186:14:38" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "2176:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "2176:25:38" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2153:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "2153:49:38" + }, + "nodeType": "YulExpressionStatement", + "src": "2153:49:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "2226:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2231:4:38", + "type": "", + "value": "0x28" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2222:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "2222:14:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2238:66:38", + "type": "", + "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2215:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "2215:90:38" + }, + "nodeType": "YulExpressionStatement", + "src": "2215:90:38" + }, + { + "nodeType": "YulAssignment", + "src": "2318:39:38", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2338:1:38", + "type": "", + "value": "0" + }, + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "2341:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2346:4:38", + "type": "", + "value": "0x37" + }, + { + "name": "salt", + "nodeType": "YulIdentifier", + "src": "2352:4:38" + } + ], + "functionName": { + "name": "create2", + "nodeType": "YulIdentifier", + "src": "2330:7:38" + }, + "nodeType": "YulFunctionCall", + "src": "2330:27:38" + }, + "variableNames": [ + { + "name": "instance", + "nodeType": "YulIdentifier", + "src": "2318:8:38" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 3077, + "isOffset": false, + "isSlot": false, + "src": "2186:14:38", + "valueSize": 1 + }, + { + "declaration": 3082, + "isOffset": false, + "isSlot": false, + "src": "2318:8:38", + "valueSize": 1 + }, + { + "declaration": 3079, + "isOffset": false, + "isSlot": false, + "src": "2352:4:38", + "valueSize": 1 + } + ], + "id": 3084, + "nodeType": "InlineAssembly", + "src": "2003:364:38" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3086, + "name": "instance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3082, + "src": "2384:8:38", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3089, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2404: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": 3088, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2396:7:38", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3087, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2396:7:38", + "typeDescriptions": {} + } + }, + "id": 3090, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2396:10:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2384:22:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "455243313136373a2063726561746532206661696c6564", + "id": 3092, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2408:25:38", + "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": 3085, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2376:7:38", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2376:58:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3094, + "nodeType": "ExpressionStatement", + "src": "2376:58:38" + } + ] + }, + "documentation": { + "id": 3075, + "nodeType": "StructuredDocumentation", + "src": "1522:364:38", + "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": 3096, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "cloneDeterministic", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3077, + "mutability": "mutable", + "name": "implementation", + "nodeType": "VariableDeclaration", + "scope": 3096, + "src": "1919:22:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3076, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1919:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3079, + "mutability": "mutable", + "name": "salt", + "nodeType": "VariableDeclaration", + "scope": 3096, + "src": "1943:12:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3078, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1943:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1918:38:38" + }, + "returnParameters": { + "id": 3083, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3082, + "mutability": "mutable", + "name": "instance", + "nodeType": "VariableDeclaration", + "scope": 3096, + "src": "1975:16:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3081, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1975:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1974:18:38" + }, + "scope": 3131, + "src": "1891:550:38", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3109, + "nodeType": "Block", + "src": "2716:539:38", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "2735:514:38", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2749:22:38", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2766:4:38", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2760:5:38" + }, + "nodeType": "YulFunctionCall", + "src": "2760:11:38" + }, + "variables": [ + { + "name": "ptr", + "nodeType": "YulTypedName", + "src": "2753:3:38", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "2791:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2796:66:38", + "type": "", + "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2784:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "2784:79:38" + }, + "nodeType": "YulExpressionStatement", + "src": "2784:79:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "2887:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2892:4:38", + "type": "", + "value": "0x14" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2883:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "2883:14:38" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2903:4:38", + "type": "", + "value": "0x60" + }, + { + "name": "implementation", + "nodeType": "YulIdentifier", + "src": "2909:14:38" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "2899:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "2899:25:38" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2876:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "2876:49:38" + }, + "nodeType": "YulExpressionStatement", + "src": "2876:49:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "2949:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2954:4:38", + "type": "", + "value": "0x28" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2945:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "2945:14:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2961:66:38", + "type": "", + "value": "0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2938:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "2938:90:38" + }, + "nodeType": "YulExpressionStatement", + "src": "2938:90:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "3052:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3057:4:38", + "type": "", + "value": "0x38" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3048:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "3048:14:38" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3068:4:38", + "type": "", + "value": "0x60" + }, + { + "name": "deployer", + "nodeType": "YulIdentifier", + "src": "3074:8:38" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3064:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "3064:19:38" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3041:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "3041:43:38" + }, + "nodeType": "YulExpressionStatement", + "src": "3041:43:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "3108:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3113:4:38", + "type": "", + "value": "0x4c" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3104:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "3104:14:38" + }, + { + "name": "salt", + "nodeType": "YulIdentifier", + "src": "3120:4:38" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3097:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "3097:28:38" + }, + "nodeType": "YulExpressionStatement", + "src": "3097:28:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "3149:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3154:4:38", + "type": "", + "value": "0x6c" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3145:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "3145:14:38" + }, + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "3171:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3176:4:38", + "type": "", + "value": "0x37" + } + ], + "functionName": { + "name": "keccak256", + "nodeType": "YulIdentifier", + "src": "3161:9:38" + }, + "nodeType": "YulFunctionCall", + "src": "3161:20:38" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3138:6:38" + }, + "nodeType": "YulFunctionCall", + "src": "3138:44:38" + }, + "nodeType": "YulExpressionStatement", + "src": "3138:44:38" + }, + { + "nodeType": "YulAssignment", + "src": "3195:44:38", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "3222:3:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3227:4:38", + "type": "", + "value": "0x37" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3218:3:38" + }, + "nodeType": "YulFunctionCall", + "src": "3218:14:38" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3234:4:38", + "type": "", + "value": "0x55" + } + ], + "functionName": { + "name": "keccak256", + "nodeType": "YulIdentifier", + "src": "3208:9:38" + }, + "nodeType": "YulFunctionCall", + "src": "3208:31:38" + }, + "variableNames": [ + { + "name": "predicted", + "nodeType": "YulIdentifier", + "src": "3195:9:38" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 3103, + "isOffset": false, + "isSlot": false, + "src": "3074:8:38", + "valueSize": 1 + }, + { + "declaration": 3099, + "isOffset": false, + "isSlot": false, + "src": "2909:14:38", + "valueSize": 1 + }, + { + "declaration": 3106, + "isOffset": false, + "isSlot": false, + "src": "3195:9:38", + "valueSize": 1 + }, + { + "declaration": 3101, + "isOffset": false, + "isSlot": false, + "src": "3120:4:38", + "valueSize": 1 + } + ], + "id": 3108, + "nodeType": "InlineAssembly", + "src": "2726:523:38" + } + ] + }, + "documentation": { + "id": 3097, + "nodeType": "StructuredDocumentation", + "src": "2447:99:38", + "text": " @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}." + }, + "id": 3110, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "predictDeterministicAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3104, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3099, + "mutability": "mutable", + "name": "implementation", + "nodeType": "VariableDeclaration", + "scope": 3110, + "src": "2597:22:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3098, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2597:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3101, + "mutability": "mutable", + "name": "salt", + "nodeType": "VariableDeclaration", + "scope": 3110, + "src": "2629:12:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3100, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2629:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3103, + "mutability": "mutable", + "name": "deployer", + "nodeType": "VariableDeclaration", + "scope": 3110, + "src": "2651:16:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3102, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2651:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2587:86:38" + }, + "returnParameters": { + "id": 3107, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3106, + "mutability": "mutable", + "name": "predicted", + "nodeType": "VariableDeclaration", + "scope": 3110, + "src": "2697:17:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3105, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2697:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2696:19:38" + }, + "scope": 3131, + "src": "2551:704:38", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3129, + "nodeType": "Block", + "src": "3510:88:38", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3121, + "name": "implementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3113, + "src": "3555:14:38", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3122, + "name": "salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3115, + "src": "3571:4:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 3125, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3585:4:38", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Clones_$3131", + "typeString": "library Clones" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Clones_$3131", + "typeString": "library Clones" + } + ], + "id": 3124, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3577:7:38", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3123, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3577:7:38", + "typeDescriptions": {} + } + }, + "id": 3126, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3577:13:38", + "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": 3120, + "name": "predictDeterministicAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3110, + 3130 + ], + "referencedDeclaration": 3110, + "src": "3527:27:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$returns$_t_address_$", + "typeString": "function (address,bytes32,address) pure returns (address)" + } + }, + "id": 3127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3527:64:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 3119, + "id": 3128, + "nodeType": "Return", + "src": "3520:71:38" + } + ] + }, + "documentation": { + "id": 3111, + "nodeType": "StructuredDocumentation", + "src": "3261:99:38", + "text": " @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}." + }, + "id": 3130, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "predictDeterministicAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3116, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3113, + "mutability": "mutable", + "name": "implementation", + "nodeType": "VariableDeclaration", + "scope": 3130, + "src": "3402:22:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3112, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3402:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3115, + "mutability": "mutable", + "name": "salt", + "nodeType": "VariableDeclaration", + "scope": 3130, + "src": "3426:12:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3114, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3426:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3401:38:38" + }, + "returnParameters": { + "id": 3119, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3118, + "mutability": "mutable", + "name": "predicted", + "nodeType": "VariableDeclaration", + "scope": 3130, + "src": "3487:17:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3117, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3487:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3486:19:38" + }, + "scope": 3131, + "src": "3365:233:38", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 3132, + "src": "740:2860:38" + } + ], + "src": "85:3516:38" + }, + "id": 38 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol", + "exportedSymbols": { + "EIP712": [ + 3224 + ] + }, + "id": 3225, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3133, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:39" + }, + { + "abstract": true, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 3134, + "nodeType": "StructuredDocumentation", + "src": "58:1142:39", + "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": 3224, + "linearizedBaseContracts": [ + 3224 + ], + "name": "EIP712", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3136, + "mutability": "immutable", + "name": "_HASHED_NAME", + "nodeType": "VariableDeclaration", + "scope": 3224, + "src": "1277:38:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3135, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1277:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3138, + "mutability": "immutable", + "name": "_HASHED_VERSION", + "nodeType": "VariableDeclaration", + "scope": 3224, + "src": "1321:41:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3137, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1321:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3140, + "mutability": "immutable", + "name": "_TYPE_HASH", + "nodeType": "VariableDeclaration", + "scope": 3224, + "src": "1368:36:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3139, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1368:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 3172, + "nodeType": "Block", + "src": "2075:225:39", + "statements": [ + { + "expression": { + "id": 3155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3148, + "name": "_HASHED_NAME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "2085:12:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 3152, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3143, + "src": "2116:4:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 3151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2110:5:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 3150, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2110:5:39", + "typeDescriptions": {} + } + }, + "id": 3153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2110:11:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3149, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2100:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 3154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2100:22:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2085:37:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 3156, + "nodeType": "ExpressionStatement", + "src": "2085:37:39" + }, + { + "expression": { + "id": 3164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3157, + "name": "_HASHED_VERSION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3138, + "src": "2132:15:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 3161, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3145, + "src": "2166:7:39", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 3160, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2160:5:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 3159, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2160:5:39", + "typeDescriptions": {} + } + }, + "id": 3162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2160:14:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3158, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2150:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 3163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2150:25:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2132:43:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 3165, + "nodeType": "ExpressionStatement", + "src": "2132:43:39" + }, + { + "expression": { + "id": 3170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3166, + "name": "_TYPE_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3140, + "src": "2185:10:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", + "id": 3168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2208:84:39", + "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": 3167, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2198:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 3169, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2198:95:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2185:108:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 3171, + "nodeType": "ExpressionStatement", + "src": "2185:108:39" + } + ] + }, + "documentation": { + "id": 3141, + "nodeType": "StructuredDocumentation", + "src": "1456:559:39", + "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": 3173, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3146, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3143, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 3173, + "src": "2032:18:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3142, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2032:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3145, + "mutability": "mutable", + "name": "version", + "nodeType": "VariableDeclaration", + "scope": 3173, + "src": "2052:21:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3144, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2052:6:39", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2031:43:39" + }, + "returnParameters": { + "id": 3147, + "nodeType": "ParameterList", + "parameters": [], + "src": "2075:0:39" + }, + "scope": 3224, + "src": "2020:280:39", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3194, + "nodeType": "Block", + "src": "2456:118:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 3182, + "name": "_TYPE_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3140, + "src": "2494:10:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3183, + "name": "_HASHED_NAME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "2506:12:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3184, + "name": "_HASHED_VERSION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3138, + "src": "2520:15:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3185, + "name": "_getChainId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3223, + "src": "2537:11:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 3186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2537:13:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 3189, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2560:4:39", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712_$3224", + "typeString": "contract EIP712" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_EIP712_$3224", + "typeString": "contract EIP712" + } + ], + "id": 3188, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2552:7:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3187, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2552:7:39", + "typeDescriptions": {} + } + }, + "id": 3190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2552:13:39", + "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": 3180, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2483:3:39", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 3181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2483:10:39", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 3191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2483:83:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3179, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2473:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 3192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2473:94:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 3178, + "id": 3193, + "nodeType": "Return", + "src": "2466:101:39" + } + ] + }, + "documentation": { + "id": 3174, + "nodeType": "StructuredDocumentation", + "src": "2306:75:39", + "text": " @dev Returns the domain separator for the current chain." + }, + "id": 3195, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_domainSeparatorV4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3175, + "nodeType": "ParameterList", + "parameters": [], + "src": "2413:2:39" + }, + "returnParameters": { + "id": 3178, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3177, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3195, + "src": "2447:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3176, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2447:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2446:9:39" + }, + "scope": 3224, + "src": "2386:188:39", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3213, + "nodeType": "Block", + "src": "3285:97:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "1901", + "id": 3206, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3329:10:39", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", + "typeString": "literal_string \"\u0019\u0001\"" + }, + "value": "\u0019\u0001" + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3207, + "name": "_domainSeparatorV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3195, + "src": "3341:18:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 3208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3341:20:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3209, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3198, + "src": "3363:10:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", + "typeString": "literal_string \"\u0019\u0001\"" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 3204, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3312:3:39", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 3205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "3312:16:39", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 3210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3312:62:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3203, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3302:9:39", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 3211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3302:73:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 3202, + "id": 3212, + "nodeType": "Return", + "src": "3295:80:39" + } + ] + }, + "documentation": { + "id": 3196, + "nodeType": "StructuredDocumentation", + "src": "2580:614:39", + "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": 3214, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_hashTypedDataV4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3198, + "mutability": "mutable", + "name": "structHash", + "nodeType": "VariableDeclaration", + "scope": 3214, + "src": "3225:18:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3197, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3225:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3224:20:39" + }, + "returnParameters": { + "id": 3202, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3201, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3214, + "src": "3276:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3200, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3276:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3275:9:39" + }, + "scope": 3224, + "src": "3199:183:39", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3222, + "nodeType": "Block", + "src": "3450:365:39", + "statements": [ + { + "expression": { + "id": 3219, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3685:4:39", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712_$3224", + "typeString": "contract EIP712" + } + }, + "id": 3220, + "nodeType": "ExpressionStatement", + "src": "3685:4:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "3765:44:39", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3779:20:39", + "value": { + "arguments": [], + "functionName": { + "name": "chainid", + "nodeType": "YulIdentifier", + "src": "3790:7:39" + }, + "nodeType": "YulFunctionCall", + "src": "3790:9:39" + }, + "variableNames": [ + { + "name": "chainId", + "nodeType": "YulIdentifier", + "src": "3779:7:39" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 3217, + "isOffset": false, + "isSlot": false, + "src": "3779:7:39", + "valueSize": 1 + } + ], + "id": 3221, + "nodeType": "InlineAssembly", + "src": "3756:53:39" + } + ] + }, + "id": 3223, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getChainId", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3215, + "nodeType": "ParameterList", + "parameters": [], + "src": "3408:2:39" + }, + "returnParameters": { + "id": 3218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3217, + "mutability": "mutable", + "name": "chainId", + "nodeType": "VariableDeclaration", + "scope": 3223, + "src": "3433:15:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3216, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3433:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3432:17:39" + }, + "scope": 3224, + "src": "3388:427:39", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 3225, + "src": "1201:2616:39" + } + ], + "src": "33:3785:39" + }, + "id": 39 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "exportedSymbols": { + "ERC20": [ + 3702 + ] + }, + "id": 3703, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3226, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:40" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 3227, + "nodeType": "ImportDirective", + "scope": 3703, + "sourceUnit": 1510, + "src": "58:90:40", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 3228, + "nodeType": "ImportDirective", + "scope": 3703, + "sourceUnit": 1651, + "src": "149:87:40", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "file": "./SafeMath.sol", + "id": 3229, + "nodeType": "ImportDirective", + "scope": 3703, + "sourceUnit": 4595, + "src": "238:24:40", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 3231, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1445:6:40", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 3232, + "nodeType": "InheritanceSpecifier", + "src": "1445:6:40" + } + ], + "contractDependencies": [ + 1650 + ], + "contractKind": "contract", + "documentation": { + "id": 3230, + "nodeType": "StructuredDocumentation", + "src": "264:1162:40", + "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.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}." + }, + "fullyImplemented": true, + "id": 3702, + "linearizedBaseContracts": [ + 3702, + 1650 + ], + "name": "ERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 3235, + "libraryName": { + "id": 3233, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4594, + "src": "1464:8:40", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$4594", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1458:27:40", + "typeName": { + "id": 3234, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1477:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 3239, + "mutability": "mutable", + "name": "_balances", + "nodeType": "VariableDeclaration", + "scope": 3702, + "src": "1491:45:40", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 3238, + "keyType": { + "id": 3236, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1499:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1491:27:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3237, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1510:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3245, + "mutability": "mutable", + "name": "_allowances", + "nodeType": "VariableDeclaration", + "scope": 3702, + "src": "1543:67:40", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "typeName": { + "id": 3244, + "keyType": { + "id": 3240, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1551:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1543:47:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "valueType": { + "id": 3243, + "keyType": { + "id": 3241, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1570:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1562:27:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3242, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1581:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3247, + "mutability": "mutable", + "name": "_totalSupply", + "nodeType": "VariableDeclaration", + "scope": 3702, + "src": "1617:28:40", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3246, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1617:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3249, + "mutability": "mutable", + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 3702, + "src": "1652:20:40", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 3248, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1652:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3251, + "mutability": "mutable", + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 3702, + "src": "1678:22:40", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 3250, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1678:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3253, + "mutability": "mutable", + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 3702, + "src": "1706:23:40", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 3252, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1706:5:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 3273, + "nodeType": "Block", + "src": "2108:81:40", + "statements": [ + { + "expression": { + "id": 3263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3261, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3249, + "src": "2118:5:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3262, + "name": "name_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3256, + "src": "2126:5:40", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "2118:13:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 3264, + "nodeType": "ExpressionStatement", + "src": "2118:13:40" + }, + { + "expression": { + "id": 3267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3265, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3251, + "src": "2141:7:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3266, + "name": "symbol_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3258, + "src": "2151:7:40", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "2141:17:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 3268, + "nodeType": "ExpressionStatement", + "src": "2141:17:40" + }, + { + "expression": { + "id": 3271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3269, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3253, + "src": "2168:9:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "3138", + "id": 3270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2180:2:40", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "src": "2168:14:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 3272, + "nodeType": "ExpressionStatement", + "src": "2168:14:40" + } + ] + }, + "documentation": { + "id": 3254, + "nodeType": "StructuredDocumentation", + "src": "1736:311:40", + "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction." + }, + "id": 3274, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3259, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3256, + "mutability": "mutable", + "name": "name_", + "nodeType": "VariableDeclaration", + "scope": 3274, + "src": "2064:19:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3255, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2064:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3258, + "mutability": "mutable", + "name": "symbol_", + "nodeType": "VariableDeclaration", + "scope": 3274, + "src": "2085:21:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3257, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2085:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2063:44:40" + }, + "returnParameters": { + "id": 3260, + "nodeType": "ParameterList", + "parameters": [], + "src": "2108:0:40" + }, + "scope": 3702, + "src": "2052:137:40", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 3282, + "nodeType": "Block", + "src": "2306:29:40", + "statements": [ + { + "expression": { + "id": 3280, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3249, + "src": "2323:5:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 3279, + "id": 3281, + "nodeType": "Return", + "src": "2316:12:40" + } + ] + }, + "documentation": { + "id": 3275, + "nodeType": "StructuredDocumentation", + "src": "2195:54:40", + "text": " @dev Returns the name of the token." + }, + "functionSelector": "06fdde03", + "id": 3283, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "name", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3276, + "nodeType": "ParameterList", + "parameters": [], + "src": "2267:2:40" + }, + "returnParameters": { + "id": 3279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3278, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3283, + "src": "2291:13:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3277, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2291:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2290:15:40" + }, + "scope": 3702, + "src": "2254:81:40", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 3291, + "nodeType": "Block", + "src": "2502:31:40", + "statements": [ + { + "expression": { + "id": 3289, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3251, + "src": "2519:7:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 3288, + "id": 3290, + "nodeType": "Return", + "src": "2512:14:40" + } + ] + }, + "documentation": { + "id": 3284, + "nodeType": "StructuredDocumentation", + "src": "2341:102:40", + "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name." + }, + "functionSelector": "95d89b41", + "id": 3292, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "symbol", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3285, + "nodeType": "ParameterList", + "parameters": [], + "src": "2463:2:40" + }, + "returnParameters": { + "id": 3288, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3287, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3292, + "src": "2487:13:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3286, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2487:6:40", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2486:15:40" + }, + "scope": 3702, + "src": "2448:85:40", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 3300, + "nodeType": "Block", + "src": "3204:33:40", + "statements": [ + { + "expression": { + "id": 3298, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3253, + "src": "3221:9:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "functionReturnParameters": 3297, + "id": 3299, + "nodeType": "Return", + "src": "3214:16:40" + } + ] + }, + "documentation": { + "id": 3293, + "nodeType": "StructuredDocumentation", + "src": "2539:612:40", + "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 {_setupDecimals} is\n called.\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": 3301, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3294, + "nodeType": "ParameterList", + "parameters": [], + "src": "3173:2:40" + }, + "returnParameters": { + "id": 3297, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3296, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3301, + "src": "3197:5:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 3295, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3197:5:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "3196:7:40" + }, + "scope": 3702, + "src": "3156:81:40", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1581 + ], + "body": { + "id": 3310, + "nodeType": "Block", + "src": "3359:36:40", + "statements": [ + { + "expression": { + "id": 3308, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3247, + "src": "3376:12:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3307, + "id": 3309, + "nodeType": "Return", + "src": "3369:19:40" + } + ] + }, + "documentation": { + "id": 3302, + "nodeType": "StructuredDocumentation", + "src": "3243:49:40", + "text": " @dev See {IERC20-totalSupply}." + }, + "functionSelector": "18160ddd", + "id": 3311, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3304, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3332:8:40" + }, + "parameters": { + "id": 3303, + "nodeType": "ParameterList", + "parameters": [], + "src": "3317:2:40" + }, + "returnParameters": { + "id": 3307, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3306, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3311, + "src": "3350:7:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3305, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3350:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3349:9:40" + }, + "scope": 3702, + "src": "3297:98:40", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1589 + ], + "body": { + "id": 3324, + "nodeType": "Block", + "src": "3528:42:40", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 3320, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "3545:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3322, + "indexExpression": { + "id": 3321, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3314, + "src": "3555:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3545:18:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3319, + "id": 3323, + "nodeType": "Return", + "src": "3538:25:40" + } + ] + }, + "documentation": { + "id": 3312, + "nodeType": "StructuredDocumentation", + "src": "3401:47:40", + "text": " @dev See {IERC20-balanceOf}." + }, + "functionSelector": "70a08231", + "id": 3325, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3316, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3501:8:40" + }, + "parameters": { + "id": 3315, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3314, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3325, + "src": "3472:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3313, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3472:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3471:17:40" + }, + "returnParameters": { + "id": 3319, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3318, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3325, + "src": "3519:7:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3317, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3519:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3518:9:40" + }, + "scope": 3702, + "src": "3453:117:40", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1599 + ], + "body": { + "id": 3345, + "nodeType": "Block", + "src": "3865:78:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3337, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3885:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3885:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3339, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3328, + "src": "3897:9:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3340, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3330, + "src": "3908:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3336, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3551, + "src": "3875:9:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3341, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3875:40:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3342, + "nodeType": "ExpressionStatement", + "src": "3875:40:40" + }, + { + "expression": { + "hexValue": "74727565", + "id": 3343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3932:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3335, + "id": 3344, + "nodeType": "Return", + "src": "3925:11:40" + } + ] + }, + "documentation": { + "id": 3326, + "nodeType": "StructuredDocumentation", + "src": "3576:192:40", + "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`." + }, + "functionSelector": "a9059cbb", + "id": 3346, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3332, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3841:8:40" + }, + "parameters": { + "id": 3331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3328, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3346, + "src": "3791:17:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3327, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3791:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3330, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3346, + "src": "3810:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3329, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3810:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3790:35:40" + }, + "returnParameters": { + "id": 3335, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3334, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3346, + "src": "3859:4:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3333, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3859:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3858:6:40" + }, + "scope": 3702, + "src": "3773:170:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1609 + ], + "body": { + "id": 3363, + "nodeType": "Block", + "src": "4099:51:40", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 3357, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3245, + "src": "4116:11:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3359, + "indexExpression": { + "id": 3358, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3349, + "src": "4128:5:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4116:18:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3361, + "indexExpression": { + "id": 3360, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3351, + "src": "4135:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4116:27:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3356, + "id": 3362, + "nodeType": "Return", + "src": "4109:34:40" + } + ] + }, + "documentation": { + "id": 3347, + "nodeType": "StructuredDocumentation", + "src": "3949:47:40", + "text": " @dev See {IERC20-allowance}." + }, + "functionSelector": "dd62ed3e", + "id": 3364, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3353, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4072:8:40" + }, + "parameters": { + "id": 3352, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3349, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3364, + "src": "4020:13:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3348, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4020:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3351, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3364, + "src": "4035:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3350, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4035:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4019:32:40" + }, + "returnParameters": { + "id": 3356, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3355, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3364, + "src": "4090:7:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3354, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4090:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4089:9:40" + }, + "scope": 3702, + "src": "4001:149:40", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1619 + ], + "body": { + "id": 3384, + "nodeType": "Block", + "src": "4377:75:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3376, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4396:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4396:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3378, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3367, + "src": "4408:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3379, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3369, + "src": "4417:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3375, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3679, + "src": "4387:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4387:37:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3381, + "nodeType": "ExpressionStatement", + "src": "4387:37:40" + }, + { + "expression": { + "hexValue": "74727565", + "id": 3382, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4441:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3374, + "id": 3383, + "nodeType": "Return", + "src": "4434:11:40" + } + ] + }, + "documentation": { + "id": 3365, + "nodeType": "StructuredDocumentation", + "src": "4156:127:40", + "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address." + }, + "functionSelector": "095ea7b3", + "id": 3385, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "approve", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3371, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4353:8:40" + }, + "parameters": { + "id": 3370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3367, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3385, + "src": "4305:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3366, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4305:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3369, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3385, + "src": "4322:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3368, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4322:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4304:33:40" + }, + "returnParameters": { + "id": 3374, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3373, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3385, + "src": "4371:4:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3372, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4371:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4370:6:40" + }, + "scope": 3702, + "src": "4288:164:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1631 + ], + "body": { + "id": 3423, + "nodeType": "Block", + "src": "5061:244:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3399, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3388, + "src": "5081:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3400, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3390, + "src": "5089:9:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3401, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3392, + "src": "5100:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3398, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3551, + "src": "5071:9:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5071:36:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3403, + "nodeType": "ExpressionStatement", + "src": "5071:36:40" + }, + { + "expression": { + "arguments": [ + { + "id": 3405, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3388, + "src": "5139:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 3406, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5159:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5159:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 3415, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3392, + "src": "5219:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3416, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "5227:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_EXCEEDS_ALLOWANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 1346, + "src": "5227:39:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "baseExpression": { + "id": 3408, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3245, + "src": "5183:11:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3410, + "indexExpression": { + "id": 3409, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3388, + "src": "5195:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5183:19:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3413, + "indexExpression": { + "expression": { + "id": 3411, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5203:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5203:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5183:31:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4593, + "src": "5183:35:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 3418, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5183:84:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3404, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3679, + "src": "5117:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5117:160:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3420, + "nodeType": "ExpressionStatement", + "src": "5117:160:40" + }, + { + "expression": { + "hexValue": "74727565", + "id": 3421, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5294:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3397, + "id": 3422, + "nodeType": "Return", + "src": "5287:11:40" + } + ] + }, + "documentation": { + "id": 3386, + "nodeType": "StructuredDocumentation", + "src": "4458:456:40", + "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": 3424, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3394, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5037:8:40" + }, + "parameters": { + "id": 3393, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3388, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3424, + "src": "4950:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3387, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4950:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3390, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3424, + "src": "4974:17:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3389, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4974:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3392, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3424, + "src": "5001:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3391, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5001:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4940:81:40" + }, + "returnParameters": { + "id": 3397, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3396, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3424, + "src": "5055:4:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3395, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5055:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5054:6:40" + }, + "scope": 3702, + "src": "4919:386:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 3451, + "nodeType": "Block", + "src": "5794:117:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3435, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5813:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3436, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5813:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3437, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3427, + "src": "5825:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 3445, + "name": "addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3429, + "src": "5871:10:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "baseExpression": { + "id": 3438, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3245, + "src": "5834:11:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3441, + "indexExpression": { + "expression": { + "id": 3439, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5846:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3440, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5846:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5834:23:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3443, + "indexExpression": { + "id": 3442, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3427, + "src": "5858:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5834:32:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3444, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 4547, + "src": "5834:36:40", + "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": 3446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5834:48:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3434, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3679, + "src": "5804:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5804:79:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3448, + "nodeType": "ExpressionStatement", + "src": "5804:79:40" + }, + { + "expression": { + "hexValue": "74727565", + "id": 3449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5900:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3433, + "id": 3450, + "nodeType": "Return", + "src": "5893:11:40" + } + ] + }, + "documentation": { + "id": 3425, + "nodeType": "StructuredDocumentation", + "src": "5311:384:40", + "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": 3452, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "increaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3427, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3452, + "src": "5727:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3426, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5727:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3429, + "mutability": "mutable", + "name": "addedValue", + "nodeType": "VariableDeclaration", + "scope": 3452, + "src": "5744:18:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5744:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5726:37:40" + }, + "returnParameters": { + "id": 3433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3432, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3452, + "src": "5788:4:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3431, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5788:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5787:6:40" + }, + "scope": 3702, + "src": "5700:211:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 3481, + "nodeType": "Block", + "src": "6497:213:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3463, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6529:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "6529:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3465, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3455, + "src": "6553:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 3473, + "name": "subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3457, + "src": "6611:15:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3474, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "6628:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_DECREASED_ALLOWANCE_BELOW_ZERO", + "nodeType": "MemberAccess", + "referencedDeclaration": 1349, + "src": "6628:43:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "baseExpression": { + "id": 3466, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3245, + "src": "6574:11:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3469, + "indexExpression": { + "expression": { + "id": 3467, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6586:3:40", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "6586:10:40", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6574:23:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3471, + "indexExpression": { + "id": 3470, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3455, + "src": "6598:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6574:32:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4593, + "src": "6574:36:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 3476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6574:98:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3462, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3679, + "src": "6507:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6507:175:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3478, + "nodeType": "ExpressionStatement", + "src": "6507:175:40" + }, + { + "expression": { + "hexValue": "74727565", + "id": 3479, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6699:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3461, + "id": 3480, + "nodeType": "Return", + "src": "6692:11:40" + } + ] + }, + "documentation": { + "id": 3453, + "nodeType": "StructuredDocumentation", + "src": "5917:476:40", + "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": 3482, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decreaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3458, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3455, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3482, + "src": "6425:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3454, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6425:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3457, + "mutability": "mutable", + "name": "subtractedValue", + "nodeType": "VariableDeclaration", + "scope": 3482, + "src": "6442:23:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3456, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6442:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6424:42:40" + }, + "returnParameters": { + "id": 3461, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3460, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3482, + "src": "6491:4:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3459, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6491:4:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6490:6:40" + }, + "scope": 3702, + "src": "6398:312:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 3550, + "nodeType": "Block", + "src": "7301:442:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3493, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3485, + "src": "7320:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3496, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7338:1:40", + "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": 3495, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7330:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3494, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7330:7:40", + "typeDescriptions": {} + } + }, + "id": 3497, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7330:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7320:20:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 3499, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "7342:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_FROM_ZERO_ADDRESS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1328, + "src": "7342:39:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3492, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "7311:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 3501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7311:71:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3502, + "nodeType": "ExpressionStatement", + "src": "7311:71:40" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3504, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3487, + "src": "7401:9:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3507, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7422:1:40", + "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": 3506, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7414:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3505, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7414:7:40", + "typeDescriptions": {} + } + }, + "id": 3508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7414:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7401:23:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 3510, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "7426:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_TO_ZERO_ADDRESS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1331, + "src": "7426:37:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3503, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "7392:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 3512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7392:72:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3513, + "nodeType": "ExpressionStatement", + "src": "7392:72:40" + }, + { + "expression": { + "arguments": [ + { + "id": 3515, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3485, + "src": "7496:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3516, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3487, + "src": "7504:9:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3517, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3489, + "src": "7515:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3514, + "name": "_beforeTokenTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3701, + "src": "7475:20:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7475:47:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3519, + "nodeType": "ExpressionStatement", + "src": "7475:47:40" + }, + { + "expression": { + "id": 3531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3520, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "7533:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3522, + "indexExpression": { + "id": 3521, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3485, + "src": "7543:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7533:17:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3527, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3489, + "src": "7575:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3528, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "7583:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_EXCEEDS_BALANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 1352, + "src": "7583:37:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 3523, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "7553:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3525, + "indexExpression": { + "id": 3524, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3485, + "src": "7563:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7553:17:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4593, + "src": "7553:21:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 3530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7553:68:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7533:88:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3532, + "nodeType": "ExpressionStatement", + "src": "7533:88:40" + }, + { + "expression": { + "id": 3542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3533, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "7631:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3535, + "indexExpression": { + "id": 3534, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3487, + "src": "7641:9:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7631:20:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3540, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3489, + "src": "7679:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 3536, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "7654:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3538, + "indexExpression": { + "id": 3537, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3487, + "src": "7664:9:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7654:20:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 4547, + "src": "7654:24:40", + "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": 3541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7654:32:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7631:55:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3543, + "nodeType": "ExpressionStatement", + "src": "7631:55:40" + }, + { + "eventCall": { + "arguments": [ + { + "id": 3545, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3485, + "src": "7710:6:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3546, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3487, + "src": "7718:9:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3547, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3489, + "src": "7729:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3544, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1640, + "src": "7701:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7701:35:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3549, + "nodeType": "EmitStatement", + "src": "7696:40:40" + } + ] + }, + "documentation": { + "id": 3483, + "nodeType": "StructuredDocumentation", + "src": "6716:463:40", + "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": 3551, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3490, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3485, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "7212:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3484, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7212:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3487, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "7236:17:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3486, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7236:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3489, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3551, + "src": "7263:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3488, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7263:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7202:81:40" + }, + "returnParameters": { + "id": 3491, + "nodeType": "ParameterList", + "parameters": [], + "src": "7301:0:40" + }, + "scope": 3702, + "src": "7184:559:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3595, + "nodeType": "Block", + "src": "8079:229:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 3562, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8118:1:40", + "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": 3561, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8110:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3560, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8110:7:40", + "typeDescriptions": {} + } + }, + "id": 3563, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8110:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3564, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3554, + "src": "8122:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3565, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3556, + "src": "8131:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3559, + "name": "_beforeTokenTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3701, + "src": "8089:20:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3566, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8089:49:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3567, + "nodeType": "ExpressionStatement", + "src": "8089:49:40" + }, + { + "expression": { + "id": 3573, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3568, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3247, + "src": "8149:12:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3571, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3556, + "src": "8181:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3569, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3247, + "src": "8164:12:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 4547, + "src": "8164:16:40", + "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": 3572, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8164:24:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8149:39:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3574, + "nodeType": "ExpressionStatement", + "src": "8149:39:40" + }, + { + "expression": { + "id": 3584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3575, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "8198:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3577, + "indexExpression": { + "id": 3576, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3554, + "src": "8208:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8198:18:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3582, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3556, + "src": "8242:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 3578, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "8219:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3580, + "indexExpression": { + "id": 3579, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3554, + "src": "8229:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8219:18:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 4547, + "src": "8219:22:40", + "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": 3583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8219:30:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8198:51:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3585, + "nodeType": "ExpressionStatement", + "src": "8198:51:40" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 3589, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8281:1:40", + "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": 3588, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8273:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3587, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8273:7:40", + "typeDescriptions": {} + } + }, + "id": 3590, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8273:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3591, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3554, + "src": "8285:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3592, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3556, + "src": "8294:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3586, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1640, + "src": "8264:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8264:37:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3594, + "nodeType": "EmitStatement", + "src": "8259:42:40" + } + ] + }, + "documentation": { + "id": 3552, + "nodeType": "StructuredDocumentation", + "src": "7749:260:40", + "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": 3596, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3557, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3554, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3596, + "src": "8029:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3553, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8029:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3556, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3596, + "src": "8046:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3555, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8046:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8028:33:40" + }, + "returnParameters": { + "id": 3558, + "nodeType": "ParameterList", + "parameters": [], + "src": "8079:0:40" + }, + "scope": 3702, + "src": "8014:294:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3653, + "nodeType": "Block", + "src": "8693:343:40", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3605, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3599, + "src": "8712:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3608, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8731:1:40", + "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": 3607, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8723:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3606, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8723:7:40", + "typeDescriptions": {} + } + }, + "id": 3609, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8723:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "8712:21:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 3611, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "8735:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3612, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_BURN_FROM_ZERO_ADDRESS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1337, + "src": "8735:35:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3604, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "8703:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 3613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8703:68:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3614, + "nodeType": "ExpressionStatement", + "src": "8703:68:40" + }, + { + "expression": { + "arguments": [ + { + "id": 3616, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3599, + "src": "8803:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 3619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8820:1:40", + "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": 3618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8812:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3617, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8812:7:40", + "typeDescriptions": {} + } + }, + "id": 3620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8812:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3621, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3601, + "src": "8824:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3615, + "name": "_beforeTokenTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3701, + "src": "8782:20:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8782:49:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3623, + "nodeType": "ExpressionStatement", + "src": "8782:49:40" + }, + { + "expression": { + "id": 3635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3624, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "8842:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3626, + "indexExpression": { + "id": 3625, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3599, + "src": "8852:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8842:18:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3631, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3601, + "src": "8886:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3632, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "8894:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_BURN_EXCEEDS_BALANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 1406, + "src": "8894:33:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 3627, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "8863:9:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3629, + "indexExpression": { + "id": 3628, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3599, + "src": "8873:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8863:18:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4593, + "src": "8863:22:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 3634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8863:65:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8842:86:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3636, + "nodeType": "ExpressionStatement", + "src": "8842:86:40" + }, + { + "expression": { + "id": 3642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3637, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3247, + "src": "8938:12:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3640, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3601, + "src": "8970:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3638, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3247, + "src": "8953:12:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4565, + "src": "8953:16:40", + "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": 3641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8953:24:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8938:39:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3643, + "nodeType": "ExpressionStatement", + "src": "8938:39:40" + }, + { + "eventCall": { + "arguments": [ + { + "id": 3645, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3599, + "src": "9001:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 3648, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9018:1:40", + "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": 3647, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9010:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3646, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9010:7:40", + "typeDescriptions": {} + } + }, + "id": 3649, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9010:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3650, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3601, + "src": "9022:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3644, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1640, + "src": "8992:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8992:37:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3652, + "nodeType": "EmitStatement", + "src": "8987:42:40" + } + ] + }, + "documentation": { + "id": 3597, + "nodeType": "StructuredDocumentation", + "src": "8314:309:40", + "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": 3654, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3602, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3599, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3654, + "src": "8643:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3598, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8643:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3601, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3654, + "src": "8660:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3600, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8660:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8642:33:40" + }, + "returnParameters": { + "id": 3603, + "nodeType": "ParameterList", + "parameters": [], + "src": "8693:0:40" + }, + "scope": 3702, + "src": "8628:408:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3678, + "nodeType": "Block", + "src": "9572:100:40", + "statements": [ + { + "expression": { + "id": 3670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 3664, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3245, + "src": "9582:11:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3667, + "indexExpression": { + "id": 3665, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3657, + "src": "9594:5:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9582:18:40", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3668, + "indexExpression": { + "id": 3666, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3659, + "src": "9601:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9582:27:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3669, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3661, + "src": "9612:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9582:36:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3671, + "nodeType": "ExpressionStatement", + "src": "9582:36:40" + }, + { + "eventCall": { + "arguments": [ + { + "id": 3673, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3657, + "src": "9642:5:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3674, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3659, + "src": "9649:7:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3675, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3661, + "src": "9658:6:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3672, + "name": "Approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1649, + "src": "9633:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3676, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9633:32:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3677, + "nodeType": "EmitStatement", + "src": "9628:37:40" + } + ] + }, + "documentation": { + "id": 3655, + "nodeType": "StructuredDocumentation", + "src": "9042:412:40", + "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": 3679, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3657, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3679, + "src": "9486:13:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3656, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9486:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3659, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3679, + "src": "9509:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9509:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3661, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3679, + "src": "9534:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3660, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9534:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9476:78:40" + }, + "returnParameters": { + "id": 3663, + "nodeType": "ParameterList", + "parameters": [], + "src": "9572:0:40" + }, + "scope": 3702, + "src": "9459:213:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3689, + "nodeType": "Block", + "src": "10045:38:40", + "statements": [ + { + "expression": { + "id": 3687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3685, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3253, + "src": "10055:9:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3686, + "name": "decimals_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3682, + "src": "10067:9:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "10055:21:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 3688, + "nodeType": "ExpressionStatement", + "src": "10055:21:40" + } + ] + }, + "documentation": { + "id": 3680, + "nodeType": "StructuredDocumentation", + "src": "9678:312:40", + "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does." + }, + "id": 3690, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setupDecimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3683, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3682, + "mutability": "mutable", + "name": "decimals_", + "nodeType": "VariableDeclaration", + "scope": 3690, + "src": "10019:15:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 3681, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "10019:5:40", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "10018:17:40" + }, + "returnParameters": { + "id": 3684, + "nodeType": "ParameterList", + "parameters": [], + "src": "10045:0:40" + }, + "scope": 3702, + "src": "9995:88:40", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3700, + "nodeType": "Block", + "src": "10789:64:40", + "statements": [] + }, + "documentation": { + "id": 3691, + "nodeType": "StructuredDocumentation", + "src": "10089:576:40", + "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": 3701, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeTokenTransfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3698, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3693, + "mutability": "mutable", + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "10709:12:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3692, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10709:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3695, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "10731:10:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3694, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10731:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3697, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "10751:14:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3696, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10751:7:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10699:72:40" + }, + "returnParameters": { + "id": 3699, + "nodeType": "ParameterList", + "parameters": [], + "src": "10789:0:40" + }, + "scope": 3702, + "src": "10670:183:40", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 3703, + "src": "1427:9428:40" + } + ], + "src": "33:10823:40" + }, + "id": 40 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol", + "exportedSymbols": { + "ERC20Burnable": [ + 3759 + ] + }, + "id": 3760, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3704, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:41" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "file": "./ERC20.sol", + "id": 3705, + "nodeType": "ImportDirective", + "scope": 3760, + "sourceUnit": 3703, + "src": "58:21:41", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 3707, + "name": "ERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3702, + "src": "325:5:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$3702", + "typeString": "contract ERC20" + } + }, + "id": 3708, + "nodeType": "InheritanceSpecifier", + "src": "325:5:41" + } + ], + "contractDependencies": [ + 1650, + 3702 + ], + "contractKind": "contract", + "documentation": { + "id": 3706, + "nodeType": "StructuredDocumentation", + "src": "81:208:41", + "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": false, + "id": 3759, + "linearizedBaseContracts": [ + 3759, + 3702, + 1650 + ], + "name": "ERC20Burnable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 3711, + "libraryName": { + "id": 3709, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4594, + "src": "343:8:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$4594", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "337:27:41", + "typeName": { + "id": 3710, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "356:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "body": { + "id": 3723, + "nodeType": "Block", + "src": "518:42:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3718, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "534:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "534:10:41", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3720, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3714, + "src": "546:6:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3717, + "name": "_burn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3654, + "src": "528:5:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "528:25:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3722, + "nodeType": "ExpressionStatement", + "src": "528:25:41" + } + ] + }, + "documentation": { + "id": 3712, + "nodeType": "StructuredDocumentation", + "src": "370:98:41", + "text": " @dev Destroys `amount` tokens from the caller.\n See {ERC20-_burn}." + }, + "functionSelector": "42966c68", + "id": 3724, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "burn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3715, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3714, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3724, + "src": "487:14:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3713, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "487:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "486:16:41" + }, + "returnParameters": { + "id": 3716, + "nodeType": "ParameterList", + "parameters": [], + "src": "518:0:41" + }, + "scope": 3759, + "src": "473:87:41", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 3757, + "nodeType": "Block", + "src": "932:217:41", + "statements": [ + { + "assignments": [ + 3733 + ], + "declarations": [ + { + "constant": false, + "id": 3733, + "mutability": "mutable", + "name": "decreasedAllowance", + "nodeType": "VariableDeclaration", + "scope": 3757, + "src": "942:26:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3732, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "942:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3744, + "initialValue": { + "arguments": [ + { + "id": 3740, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3729, + "src": "1006:6:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3741, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1014:6:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_BURN_EXCEEDS_ALLOWANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 1355, + "src": "1014:35:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 3735, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3727, + "src": "981:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 3736, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "990:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "990:10:41", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 3734, + "name": "allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3364, + "src": "971:9:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view returns (uint256)" + } + }, + "id": 3738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "971:30:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4593, + "src": "971:34:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 3743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "971:79:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "942:108:41" + }, + { + "expression": { + "arguments": [ + { + "id": 3746, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3727, + "src": "1070:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 3747, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1079:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1079:10:41", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 3749, + "name": "decreasedAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3733, + "src": "1091:18:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3745, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3679, + "src": "1061:8:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1061:49:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3751, + "nodeType": "ExpressionStatement", + "src": "1061:49:41" + }, + { + "expression": { + "arguments": [ + { + "id": 3753, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3727, + "src": "1126:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3754, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3729, + "src": "1135:6:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3752, + "name": "_burn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3654, + "src": "1120:5:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3755, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1120:22:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3756, + "nodeType": "ExpressionStatement", + "src": "1120:22:41" + } + ] + }, + "documentation": { + "id": 3725, + "nodeType": "StructuredDocumentation", + "src": "566:295:41", + "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": 3758, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "burnFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3730, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3727, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3758, + "src": "884:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3726, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "884:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3729, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3758, + "src": "901:14:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "901:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "883:33:41" + }, + "returnParameters": { + "id": 3731, + "nodeType": "ParameterList", + "parameters": [], + "src": "932:0:41" + }, + "scope": 3759, + "src": "866:283:41", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + } + ], + "scope": 3760, + "src": "290:861:41" + } + ], + "src": "33:1119:41" + }, + "id": 41 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol", + "exportedSymbols": { + "ERC20Permit": [ + 3912 + ] + }, + "id": 3913, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3761, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:42" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol", + "id": 3762, + "nodeType": "ImportDirective", + "scope": 3913, + "sourceUnit": 1687, + "src": "58:93:42", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "file": "./ERC20.sol", + "id": 3763, + "nodeType": "ImportDirective", + "scope": 3913, + "sourceUnit": 3703, + "src": "153:21:42", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol", + "file": "./EIP712.sol", + "id": 3764, + "nodeType": "ImportDirective", + "scope": 3913, + "sourceUnit": 3225, + "src": "175:22:42", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 3766, + "name": "ERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3702, + "src": "750:5:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$3702", + "typeString": "contract ERC20" + } + }, + "id": 3767, + "nodeType": "InheritanceSpecifier", + "src": "750:5:42" + }, + { + "baseName": { + "id": 3768, + "name": "IERC20Permit", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1686, + "src": "757:12:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Permit_$1686", + "typeString": "contract IERC20Permit" + } + }, + "id": 3769, + "nodeType": "InheritanceSpecifier", + "src": "757:12:42" + }, + { + "baseName": { + "id": 3770, + "name": "EIP712", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3224, + "src": "771:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712_$3224", + "typeString": "contract EIP712" + } + }, + "id": 3771, + "nodeType": "InheritanceSpecifier", + "src": "771:6:42" + } + ], + "contractDependencies": [ + 1650, + 1686, + 3224, + 3702 + ], + "contractKind": "contract", + "documentation": { + "id": 3765, + "nodeType": "StructuredDocumentation", + "src": "199:517:42", + "text": " @dev Implementation 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.\n _Available since v3.4._" + }, + "fullyImplemented": false, + "id": 3912, + "linearizedBaseContracts": [ + 3912, + 3224, + 1686, + 3702, + 1650 + ], + "name": "ERC20Permit", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3775, + "mutability": "mutable", + "name": "_nonces", + "nodeType": "VariableDeclaration", + "scope": 3912, + "src": "784:43:42", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 3774, + "keyType": { + "id": 3772, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "792:7:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "784:27:42", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3773, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "803:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 3780, + "mutability": "immutable", + "name": "_PERMIT_TYPEHASH", + "nodeType": "VariableDeclaration", + "scope": 3912, + "src": "886:154:42", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3776, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "886:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529", + "id": 3778, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "950:84:42", + "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": 3777, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "931:9:42", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 3779, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "931:109:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 3790, + "nodeType": "Block", + "src": "1322:64:42", + "statements": [] + }, + "documentation": { + "id": 3781, + "nodeType": "StructuredDocumentation", + "src": "1047:220:42", + "text": " @dev Initializes the {EIP712} domain separator using the `name` parameter, 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": 3791, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 3786, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3783, + "src": "1311:4:42", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "hexValue": "31", + "id": 3787, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1317:3:42", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + }, + "value": "1" + } + ], + "id": 3788, + "modifierName": { + "id": 3785, + "name": "EIP712", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3224, + "src": "1304:6:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EIP712_$3224_$", + "typeString": "type(contract EIP712)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1304:17:42" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3784, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3783, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 3791, + "src": "1284:18:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3782, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1284:6:42", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1283:20:42" + }, + "returnParameters": { + "id": 3789, + "nodeType": "ParameterList", + "parameters": [], + "src": "1322:0:42" + }, + "scope": 3912, + "src": "1272:114:42", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1671 + ], + "body": { + "id": 3885, + "nodeType": "Block", + "src": "1645:555:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3814, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3811, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "1718:5:42", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 3812, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "1718:15:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 3813, + "name": "deadline", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3800, + "src": "1737:8:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1718:27:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 3815, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1747:6:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "EXPIRED_PERMIT", + "nodeType": "MemberAccess", + "referencedDeclaration": 1136, + "src": "1747:21:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3810, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "1709:8:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 3817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1709:60:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3818, + "nodeType": "ExpressionStatement", + "src": "1709:60:42" + }, + { + "assignments": [ + 3820 + ], + "declarations": [ + { + "constant": false, + "id": 3820, + "mutability": "mutable", + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 3885, + "src": "1780:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3819, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1780:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3824, + "initialValue": { + "baseExpression": { + "id": 3821, + "name": "_nonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3775, + "src": "1796:7:42", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3823, + "indexExpression": { + "id": 3822, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3794, + "src": "1804:5:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1796:14:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1780:30:42" + }, + { + "assignments": [ + 3826 + ], + "declarations": [ + { + "constant": false, + "id": 3826, + "mutability": "mutable", + "name": "structHash", + "nodeType": "VariableDeclaration", + "scope": 3885, + "src": "1820:18:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3825, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1820:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 3838, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 3830, + "name": "_PERMIT_TYPEHASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3780, + "src": "1862:16:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3831, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3794, + "src": "1880:5:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3832, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3796, + "src": "1887:7:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3833, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3798, + "src": "1896:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3834, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3820, + "src": "1903:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3835, + "name": "deadline", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3800, + "src": "1910:8:42", + "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": 3828, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1851:3:42", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 3829, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1851:10:42", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 3836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1851:68:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3827, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1841:9:42", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 3837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1841:79:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1820:100:42" + }, + { + "assignments": [ + 3840 + ], + "declarations": [ + { + "constant": false, + "id": 3840, + "mutability": "mutable", + "name": "hash", + "nodeType": "VariableDeclaration", + "scope": 3885, + "src": "1931:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3839, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1931:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 3844, + "initialValue": { + "arguments": [ + { + "id": 3842, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3826, + "src": "1963:10:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 3841, + "name": "_hashTypedDataV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3214, + "src": "1946:16:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + "id": 3843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1946:28:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1931:43:42" + }, + { + "assignments": [ + 3846 + ], + "declarations": [ + { + "constant": false, + "id": 3846, + "mutability": "mutable", + "name": "signer", + "nodeType": "VariableDeclaration", + "scope": 3885, + "src": "1985:14:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3845, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1985:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 3853, + "initialValue": { + "arguments": [ + { + "id": 3848, + "name": "hash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3840, + "src": "2012:4:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3849, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3802, + "src": "2018:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 3850, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3804, + "src": "2021:1:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3851, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3806, + "src": "2024:1:42", + "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": 3847, + "name": "ecrecover", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -6, + "src": "2002:9:42", + "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": 3852, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2002:24:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1985:41:42" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 3866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3855, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3846, + "src": "2046:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3858, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2064:1:42", + "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": 3857, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2056:7:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3856, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2056:7:42", + "typeDescriptions": {} + } + }, + "id": 3859, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2056:10:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2046:20:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 3861, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2045:22:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3862, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3846, + "src": "2072:6:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 3863, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3794, + "src": "2082:5:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2072:15:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 3865, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2071:17:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2045:43:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 3867, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2090:6:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 3868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_SIGNATURE", + "nodeType": "MemberAccess", + "referencedDeclaration": 1424, + "src": "2090:24:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3854, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2036:8:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 3869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2036:79:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3870, + "nodeType": "ExpressionStatement", + "src": "2036:79:42" + }, + { + "expression": { + "id": 3877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3871, + "name": "_nonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3775, + "src": "2126:7:42", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3873, + "indexExpression": { + "id": 3872, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3794, + "src": "2134:5:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2126:14:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3874, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3820, + "src": "2143:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 3875, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2151:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2143:9:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2126:26:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3878, + "nodeType": "ExpressionStatement", + "src": "2126:26:42" + }, + { + "expression": { + "arguments": [ + { + "id": 3880, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3794, + "src": "2171:5:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3881, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3796, + "src": "2178:7:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3882, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3798, + "src": "2187:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3879, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3679, + "src": "2162:8:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2162:31:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3884, + "nodeType": "ExpressionStatement", + "src": "2162:31:42" + } + ] + }, + "documentation": { + "id": 3792, + "nodeType": "StructuredDocumentation", + "src": "1392:50:42", + "text": " @dev See {IERC20Permit-permit}." + }, + "functionSelector": "d505accf", + "id": 3886, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "permit", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3808, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1636:8:42" + }, + "parameters": { + "id": 3807, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3794, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3886, + "src": "1472:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3793, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1472:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3796, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3886, + "src": "1495:15:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3795, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1495:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3798, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3886, + "src": "1520:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3797, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1520:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3800, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 3886, + "src": "1543:16:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3799, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1543:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3802, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 3886, + "src": "1569:7:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 3801, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1569:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3804, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 3886, + "src": "1586:9:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3803, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1586:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3806, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 3886, + "src": "1605:9:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3805, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1605:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1462:158:42" + }, + "returnParameters": { + "id": 3809, + "nodeType": "ParameterList", + "parameters": [], + "src": "1645:0:42" + }, + "scope": 3912, + "src": "1447:753:42", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1679 + ], + "body": { + "id": 3899, + "nodeType": "Block", + "src": "2331:38:42", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 3895, + "name": "_nonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3775, + "src": "2348:7:42", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3897, + "indexExpression": { + "id": 3896, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3889, + "src": "2356:5:42", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2348:14:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3894, + "id": 3898, + "nodeType": "Return", + "src": "2341:21:42" + } + ] + }, + "documentation": { + "id": 3887, + "nodeType": "StructuredDocumentation", + "src": "2206:50:42", + "text": " @dev See {IERC20Permit-nonces}." + }, + "functionSelector": "7ecebe00", + "id": 3900, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "nonces", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3891, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2304:8:42" + }, + "parameters": { + "id": 3890, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3889, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3900, + "src": "2277:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3888, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2277:7:42", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2276:15:42" + }, + "returnParameters": { + "id": 3894, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3893, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3900, + "src": "2322:7:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3892, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2322:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2321:9:42" + }, + "scope": 3912, + "src": "2261:108:42", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1685 + ], + "body": { + "id": 3910, + "nodeType": "Block", + "src": "2562:44:42", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3907, + "name": "_domainSeparatorV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3195, + "src": "2579:18:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 3908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2579:20:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 3906, + "id": 3909, + "nodeType": "Return", + "src": "2572:27:42" + } + ] + }, + "documentation": { + "id": 3901, + "nodeType": "StructuredDocumentation", + "src": "2375:60:42", + "text": " @dev See {IERC20Permit-DOMAIN_SEPARATOR}." + }, + "functionSelector": "3644e515", + "id": 3911, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "DOMAIN_SEPARATOR", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3903, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2535:8:42" + }, + "parameters": { + "id": 3902, + "nodeType": "ParameterList", + "parameters": [], + "src": "2518:2:42" + }, + "returnParameters": { + "id": 3906, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3905, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3911, + "src": "2553:7:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3904, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2553:7:42", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2552:9:42" + }, + "scope": 3912, + "src": "2493:113:42", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3913, + "src": "717:1891:42" + } + ], + "src": "33:2576:42" + }, + "id": 42 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol", + "exportedSymbols": { + "EnumerableSet": [ + 4365 + ] + }, + "id": 4366, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3914, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "406:23:43" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 3915, + "nodeType": "ImportDirective", + "scope": 4366, + "sourceUnit": 1510, + "src": "431:90:43", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 3916, + "nodeType": "StructuredDocumentation", + "src": "523:686:43", + "text": " @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```\n As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n and `uint256` (`UintSet`) are supported." + }, + "fullyImplemented": true, + "id": 4365, + "linearizedBaseContracts": [ + 4365 + ], + "name": "EnumerableSet", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "EnumerableSet.AddressSet", + "id": 3924, + "members": [ + { + "constant": false, + "id": 3919, + "mutability": "mutable", + "name": "_values", + "nodeType": "VariableDeclaration", + "scope": 3924, + "src": "1503:17:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 3917, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1503:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 3918, + "nodeType": "ArrayTypeName", + "src": "1503:9:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3923, + "mutability": "mutable", + "name": "_indexes", + "nodeType": "VariableDeclaration", + "scope": 3924, + "src": "1653:36:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 3922, + "keyType": { + "id": 3920, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1661:7:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1653:27:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3921, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1672:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + } + ], + "name": "AddressSet", + "nodeType": "StructDefinition", + "scope": 4365, + "src": "1442:254:43", + "visibility": "public" + }, + { + "body": { + "id": 3964, + "nodeType": "Block", + "src": "1927:334:43", + "statements": [ + { + "condition": { + "id": 3938, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1941:21:43", + "subExpression": { + "arguments": [ + { + "id": 3935, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3927, + "src": "1951:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + { + "id": 3936, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3929, + "src": "1956:5:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3934, + "name": "contains", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4068, + 4292 + ], + "referencedDeclaration": 4068, + "src": "1942:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)" + } + }, + "id": 3937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1942:20:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 3962, + "nodeType": "Block", + "src": "2218:37:43", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 3960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2239:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 3933, + "id": 3961, + "nodeType": "Return", + "src": "2232:12:43" + } + ] + }, + "id": 3963, + "nodeType": "IfStatement", + "src": "1937:318:43", + "trueBody": { + "id": 3959, + "nodeType": "Block", + "src": "1964:248:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3944, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3929, + "src": "1995:5:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "expression": { + "id": 3939, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3927, + "src": "1978:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 3942, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "1978:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 3943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "push", + "nodeType": "MemberAccess", + "src": "1978:16:43", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 3945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1978:23:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3946, + "nodeType": "ExpressionStatement", + "src": "1978:23:43" + }, + { + "expression": { + "id": 3955, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "expression": { + "id": 3947, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3927, + "src": "2136:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 3950, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 3923, + "src": "2136:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3951, + "indexExpression": { + "id": 3949, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3929, + "src": "2149:5:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2136:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 3952, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3927, + "src": "2158:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 3953, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "2158:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 3954, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2158:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2136:40:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3956, + "nodeType": "ExpressionStatement", + "src": "2136:40:43" + }, + { + "expression": { + "hexValue": "74727565", + "id": 3957, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2197:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3933, + "id": 3958, + "nodeType": "Return", + "src": "2190:11:43" + } + ] + } + } + ] + }, + "documentation": { + "id": 3925, + "nodeType": "StructuredDocumentation", + "src": "1702:144:43", + "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, if it was not already present." + }, + "id": 3965, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3930, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3927, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 3965, + "src": "1864:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 3926, + "name": "AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "1864:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3929, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3965, + "src": "1888:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3928, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1888:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1863:39:43" + }, + "returnParameters": { + "id": 3933, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3932, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3965, + "src": "1921:4:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3931, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1921:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1920:6:43" + }, + "scope": 4365, + "src": "1851:410:43", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4049, + "nodeType": "Block", + "src": "2508:1388:43", + "statements": [ + { + "assignments": [ + 3976 + ], + "declarations": [ + { + "constant": false, + "id": 3976, + "mutability": "mutable", + "name": "valueIndex", + "nodeType": "VariableDeclaration", + "scope": 4049, + "src": "2618:18:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3975, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2618:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3981, + "initialValue": { + "baseExpression": { + "expression": { + "id": 3977, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3968, + "src": "2639:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 3978, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 3923, + "src": "2639:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3980, + "indexExpression": { + "id": 3979, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3970, + "src": "2652:5:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2639:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2618:40:43" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3984, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3982, + "name": "valueIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3976, + "src": "2673:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 3983, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2687:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2673:15:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4047, + "nodeType": "Block", + "src": "3853:37:43", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 4045, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3874:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 3974, + "id": 4046, + "nodeType": "Return", + "src": "3867:12:43" + } + ] + }, + "id": 4048, + "nodeType": "IfStatement", + "src": "2669:1221:43", + "trueBody": { + "id": 4044, + "nodeType": "Block", + "src": "2690:1157:43", + "statements": [ + { + "assignments": [ + 3986 + ], + "declarations": [ + { + "constant": false, + "id": 3986, + "mutability": "mutable", + "name": "toDeleteIndex", + "nodeType": "VariableDeclaration", + "scope": 4044, + "src": "3042:21:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3985, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3042:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3990, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3989, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3987, + "name": "valueIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3976, + "src": "3066:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 3988, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3079:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3066:14:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3042:38:43" + }, + { + "assignments": [ + 3992 + ], + "declarations": [ + { + "constant": false, + "id": 3992, + "mutability": "mutable", + "name": "lastIndex", + "nodeType": "VariableDeclaration", + "scope": 4044, + "src": "3094:17:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3991, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3094:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3998, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 3993, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3968, + "src": "3114:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 3994, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "3114:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 3995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3114:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 3996, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3135:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3114:22:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3094:42:43" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3999, + "name": "toDeleteIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3986, + "src": "3236:13:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 4000, + "name": "lastIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3992, + "src": "3253:9:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3236:26:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4028, + "nodeType": "IfStatement", + "src": "3232:389:43", + "trueBody": { + "id": 4027, + "nodeType": "Block", + "src": "3264:357:43", + "statements": [ + { + "assignments": [ + 4003 + ], + "declarations": [ + { + "constant": false, + "id": 4003, + "mutability": "mutable", + "name": "lastValue", + "nodeType": "VariableDeclaration", + "scope": 4027, + "src": "3282:17:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4002, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3282:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4008, + "initialValue": { + "baseExpression": { + "expression": { + "id": 4004, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3968, + "src": "3302:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4005, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "3302:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 4007, + "indexExpression": { + "id": 4006, + "name": "lastIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3992, + "src": "3314:9:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3302:22:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3282:42:43" + }, + { + "expression": { + "id": 4015, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "expression": { + "id": 4009, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3968, + "src": "3424:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4012, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "3424:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 4013, + "indexExpression": { + "id": 4011, + "name": "toDeleteIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3986, + "src": "3436:13:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3424:26:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4014, + "name": "lastValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "3453:9:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3424:38:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4016, + "nodeType": "ExpressionStatement", + "src": "3424:38:43" + }, + { + "expression": { + "id": 4025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "expression": { + "id": 4017, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3968, + "src": "3536:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4020, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 3923, + "src": "3536:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 4021, + "indexExpression": { + "id": 4019, + "name": "lastValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4003, + "src": "3549:9:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3536:23:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4024, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4022, + "name": "toDeleteIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3986, + "src": "3562:13:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 4023, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3578:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3562:17:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3536:43:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4026, + "nodeType": "ExpressionStatement", + "src": "3536:43:43" + } + ] + } + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 4029, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3968, + "src": "3699:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4032, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "3699:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 4033, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "pop", + "nodeType": "MemberAccess", + "src": "3699:15:43", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 4034, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3699:17:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4035, + "nodeType": "ExpressionStatement", + "src": "3699:17:43" + }, + { + "expression": { + "id": 4040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "3784:26:43", + "subExpression": { + "baseExpression": { + "expression": { + "id": 4036, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3968, + "src": "3791:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4037, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 3923, + "src": "3791:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 4039, + "indexExpression": { + "id": 4038, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3970, + "src": "3804:5:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3791:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4041, + "nodeType": "ExpressionStatement", + "src": "3784:26:43" + }, + { + "expression": { + "hexValue": "74727565", + "id": 4042, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3832:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3974, + "id": 4043, + "nodeType": "Return", + "src": "3825:11:43" + } + ] + } + } + ] + }, + "documentation": { + "id": 3966, + "nodeType": "StructuredDocumentation", + "src": "2267:157:43", + "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present." + }, + "id": 4050, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "remove", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3971, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3968, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4050, + "src": "2445:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 3967, + "name": "AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "2445:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3970, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4050, + "src": "2469:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3969, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2469:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2444:39:43" + }, + "returnParameters": { + "id": 3974, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3973, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4050, + "src": "2502:4:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3972, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2502:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2501:6:43" + }, + "scope": 4365, + "src": "2429:1467:43", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4067, + "nodeType": "Block", + "src": "4063:48:43", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "expression": { + "id": 4060, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4053, + "src": "4080:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4061, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 3923, + "src": "4080:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 4063, + "indexExpression": { + "id": 4062, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4055, + "src": "4093:5:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4080:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 4064, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4103:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4080:24:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4059, + "id": 4066, + "nodeType": "Return", + "src": "4073:31:43" + } + ] + }, + "documentation": { + "id": 4051, + "nodeType": "StructuredDocumentation", + "src": "3902:70:43", + "text": " @dev Returns true if the value is in the set. O(1)." + }, + "id": 4068, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "contains", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4056, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4053, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4068, + "src": "3995:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 4052, + "name": "AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "3995:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4055, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4068, + "src": "4019:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4054, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4019:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3994:39:43" + }, + "returnParameters": { + "id": 4059, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4058, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4068, + "src": "4057:4:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4057, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4057:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4056:6:43" + }, + "scope": 4365, + "src": "3977:134:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4080, + "nodeType": "Block", + "src": "4264:42:43", + "statements": [ + { + "expression": { + "expression": { + "expression": { + "id": 4076, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4071, + "src": "4281:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4077, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "4281:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 4078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4281:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4075, + "id": 4079, + "nodeType": "Return", + "src": "4274:25:43" + } + ] + }, + "documentation": { + "id": 4069, + "nodeType": "StructuredDocumentation", + "src": "4117:70:43", + "text": " @dev Returns the number of values on the set. O(1)." + }, + "id": 4081, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "length", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4072, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4071, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4081, + "src": "4208:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 4070, + "name": "AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "4208:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + } + ], + "src": "4207:24:43" + }, + "returnParameters": { + "id": 4075, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4074, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4081, + "src": "4255:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4073, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4255:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4254:9:43" + }, + "scope": 4365, + "src": "4192:114:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4106, + "nodeType": "Block", + "src": "4731:116:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4096, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 4092, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4084, + "src": "4750:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4093, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "4750:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 4094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4750:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 4095, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4086, + "src": "4771:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4750:26:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4097, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "4778:6:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 4098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1094, + "src": "4778:20:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4091, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "4741:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4099, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4741:58:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4100, + "nodeType": "ExpressionStatement", + "src": "4741:58:43" + }, + { + "expression": { + "arguments": [ + { + "id": 4102, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4084, + "src": "4829:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + { + "id": 4103, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4086, + "src": "4834:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4101, + "name": "unchecked_at", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4123, + 4347 + ], + "referencedDeclaration": 4123, + "src": "4816:12:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_uint256_$returns$_t_address_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)" + } + }, + "id": 4104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4816:24:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4090, + "id": 4105, + "nodeType": "Return", + "src": "4809:31:43" + } + ] + }, + "documentation": { + "id": 4082, + "nodeType": "StructuredDocumentation", + "src": "4312:331:43", + "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}." + }, + "id": 4107, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "at", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4087, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4084, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4107, + "src": "4660:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 4083, + "name": "AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "4660:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4086, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 4107, + "src": "4684:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4085, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4684:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4659:39:43" + }, + "returnParameters": { + "id": 4090, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4089, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4107, + "src": "4722:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4088, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4722:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4721:9:43" + }, + "scope": 4365, + "src": "4648:199:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4122, + "nodeType": "Block", + "src": "5305:42:43", + "statements": [ + { + "expression": { + "baseExpression": { + "expression": { + "id": 4117, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4110, + "src": "5322:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4118, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 3919, + "src": "5322:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage", + "typeString": "address[] storage ref" + } + }, + "id": 4120, + "indexExpression": { + "id": 4119, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4112, + "src": "5334:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5322:18:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4116, + "id": 4121, + "nodeType": "Return", + "src": "5315:25:43" + } + ] + }, + "documentation": { + "id": 4108, + "nodeType": "StructuredDocumentation", + "src": "4853:301:43", + "text": " @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n than {length}). O(1).\n This function performs one less storage read than {at}, but should only be used when `index` is known to be\n within bounds." + }, + "id": 4123, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "unchecked_at", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4113, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4110, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4123, + "src": "5234:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 4109, + "name": "AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "5234:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4112, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 4123, + "src": "5258:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4111, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5258:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5233:39:43" + }, + "returnParameters": { + "id": 4116, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4115, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4123, + "src": "5296:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4114, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5296:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5295:9:43" + }, + "scope": 4365, + "src": "5212:135:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4139, + "nodeType": "Block", + "src": "5444:47:43", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "expression": { + "id": 4132, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4125, + "src": "5461:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 4133, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 3923, + "src": "5461:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 4135, + "indexExpression": { + "id": 4134, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4127, + "src": "5474:5:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5461:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 4136, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5483:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5461:23:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4131, + "id": 4138, + "nodeType": "Return", + "src": "5454:30:43" + } + ] + }, + "id": 4140, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "rawIndexOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4128, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4125, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4140, + "src": "5373:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 4124, + "name": "AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "5373:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4127, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4140, + "src": "5397:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5397:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5372:39:43" + }, + "returnParameters": { + "id": 4131, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4130, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4140, + "src": "5435:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4129, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5435:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5434:9:43" + }, + "scope": 4365, + "src": "5353:138:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "canonicalName": "EnumerableSet.Bytes32Set", + "id": 4148, + "members": [ + { + "constant": false, + "id": 4143, + "mutability": "mutable", + "name": "_values", + "nodeType": "VariableDeclaration", + "scope": 4148, + "src": "5558:17:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 4141, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5558:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4142, + "nodeType": "ArrayTypeName", + "src": "5558:9:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4147, + "mutability": "mutable", + "name": "_indexes", + "nodeType": "VariableDeclaration", + "scope": 4148, + "src": "5708:36:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 4146, + "keyType": { + "id": 4144, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5716:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "5708:27:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 4145, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5727:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + } + ], + "name": "Bytes32Set", + "nodeType": "StructDefinition", + "scope": 4365, + "src": "5497:254:43", + "visibility": "public" + }, + { + "body": { + "id": 4188, + "nodeType": "Block", + "src": "5997:334:43", + "statements": [ + { + "condition": { + "id": 4162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "6011:21:43", + "subExpression": { + "arguments": [ + { + "id": 4159, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4151, + "src": "6021:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + { + "id": 4160, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4153, + "src": "6026:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4158, + "name": "contains", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4068, + 4292 + ], + "referencedDeclaration": 4292, + "src": "6012:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Bytes32Set_$4148_storage_ptr_$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (struct EnumerableSet.Bytes32Set storage pointer,bytes32) view returns (bool)" + } + }, + "id": 4161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6012:20:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4186, + "nodeType": "Block", + "src": "6288:37:43", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 4184, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6309:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 4157, + "id": 4185, + "nodeType": "Return", + "src": "6302:12:43" + } + ] + }, + "id": 4187, + "nodeType": "IfStatement", + "src": "6007:318:43", + "trueBody": { + "id": 4183, + "nodeType": "Block", + "src": "6034:248:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4168, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4153, + "src": "6065:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "expression": { + "id": 4163, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4151, + "src": "6048:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4166, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "6048:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "push", + "nodeType": "MemberAccess", + "src": "6048:16:43", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + "id": 4169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6048:23:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4170, + "nodeType": "ExpressionStatement", + "src": "6048:23:43" + }, + { + "expression": { + "id": 4179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "expression": { + "id": 4171, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4151, + "src": "6206:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4174, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 4147, + "src": "6206:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4175, + "indexExpression": { + "id": 4173, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4153, + "src": "6219:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6206:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 4176, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4151, + "src": "6228:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4177, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "6228:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6228:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6206:40:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4180, + "nodeType": "ExpressionStatement", + "src": "6206:40:43" + }, + { + "expression": { + "hexValue": "74727565", + "id": 4181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6267:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4157, + "id": 4182, + "nodeType": "Return", + "src": "6260:11:43" + } + ] + } + } + ] + }, + "documentation": { + "id": 4149, + "nodeType": "StructuredDocumentation", + "src": "5757:159:43", + "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present." + }, + "id": 4189, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4154, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4151, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4189, + "src": "5934:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + }, + "typeName": { + "id": 4150, + "name": "Bytes32Set", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4148, + "src": "5934:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4153, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4189, + "src": "5958:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4152, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5958:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5933:39:43" + }, + "returnParameters": { + "id": 4157, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4156, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4189, + "src": "5991:4:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4155, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5991:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5990:6:43" + }, + "scope": 4365, + "src": "5921:410:43", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4273, + "nodeType": "Block", + "src": "6571:1388:43", + "statements": [ + { + "assignments": [ + 4200 + ], + "declarations": [ + { + "constant": false, + "id": 4200, + "mutability": "mutable", + "name": "valueIndex", + "nodeType": "VariableDeclaration", + "scope": 4273, + "src": "6681:18:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4199, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6681:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4205, + "initialValue": { + "baseExpression": { + "expression": { + "id": 4201, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "6702:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4202, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 4147, + "src": "6702:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4204, + "indexExpression": { + "id": 4203, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4194, + "src": "6715:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6702:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6681:40:43" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4206, + "name": "valueIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4200, + "src": "6736:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 4207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6750:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6736:15:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4271, + "nodeType": "Block", + "src": "7916:37:43", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 4269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7937:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 4198, + "id": 4270, + "nodeType": "Return", + "src": "7930:12:43" + } + ] + }, + "id": 4272, + "nodeType": "IfStatement", + "src": "6732:1221:43", + "trueBody": { + "id": 4268, + "nodeType": "Block", + "src": "6753:1157:43", + "statements": [ + { + "assignments": [ + 4210 + ], + "declarations": [ + { + "constant": false, + "id": 4210, + "mutability": "mutable", + "name": "toDeleteIndex", + "nodeType": "VariableDeclaration", + "scope": 4268, + "src": "7105:21:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4209, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7105:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4214, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4211, + "name": "valueIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4200, + "src": "7129:10:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 4212, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7142:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "7129:14:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7105:38:43" + }, + { + "assignments": [ + 4216 + ], + "declarations": [ + { + "constant": false, + "id": 4216, + "mutability": "mutable", + "name": "lastIndex", + "nodeType": "VariableDeclaration", + "scope": 4268, + "src": "7157:17:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4215, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7157:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4222, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 4217, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "7177:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4218, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "7177:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7177:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 4220, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7198:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "7177:22:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7157:42:43" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4223, + "name": "toDeleteIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4210, + "src": "7299:13:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 4224, + "name": "lastIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4216, + "src": "7316:9:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7299:26:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4252, + "nodeType": "IfStatement", + "src": "7295:389:43", + "trueBody": { + "id": 4251, + "nodeType": "Block", + "src": "7327:357:43", + "statements": [ + { + "assignments": [ + 4227 + ], + "declarations": [ + { + "constant": false, + "id": 4227, + "mutability": "mutable", + "name": "lastValue", + "nodeType": "VariableDeclaration", + "scope": 4251, + "src": "7345:17:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4226, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7345:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 4232, + "initialValue": { + "baseExpression": { + "expression": { + "id": 4228, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "7365:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4229, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "7365:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4231, + "indexExpression": { + "id": 4230, + "name": "lastIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4216, + "src": "7377:9:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7365:22:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7345:42:43" + }, + { + "expression": { + "id": 4239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "expression": { + "id": 4233, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "7487:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4236, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "7487:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4237, + "indexExpression": { + "id": 4235, + "name": "toDeleteIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4210, + "src": "7499:13:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7487:26:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4238, + "name": "lastValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4227, + "src": "7516:9:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "7487:38:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4240, + "nodeType": "ExpressionStatement", + "src": "7487:38:43" + }, + { + "expression": { + "id": 4249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "expression": { + "id": 4241, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "7599:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4244, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 4147, + "src": "7599:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4245, + "indexExpression": { + "id": 4243, + "name": "lastValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4227, + "src": "7612:9:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7599:23:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4246, + "name": "toDeleteIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4210, + "src": "7625:13:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 4247, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7641:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "7625:17:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7599:43:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4250, + "nodeType": "ExpressionStatement", + "src": "7599:43:43" + } + ] + } + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 4253, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "7762:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4256, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "7762:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4257, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "pop", + "nodeType": "MemberAccess", + "src": "7762:15:43", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 4258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7762:17:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4259, + "nodeType": "ExpressionStatement", + "src": "7762:17:43" + }, + { + "expression": { + "id": 4264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "7847:26:43", + "subExpression": { + "baseExpression": { + "expression": { + "id": 4260, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4192, + "src": "7854:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4261, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 4147, + "src": "7854:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4263, + "indexExpression": { + "id": 4262, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4194, + "src": "7867:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7854:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4265, + "nodeType": "ExpressionStatement", + "src": "7847:26:43" + }, + { + "expression": { + "hexValue": "74727565", + "id": 4266, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7895:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 4198, + "id": 4267, + "nodeType": "Return", + "src": "7888:11:43" + } + ] + } + } + ] + }, + "documentation": { + "id": 4190, + "nodeType": "StructuredDocumentation", + "src": "6337:150:43", + "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was present." + }, + "id": 4274, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "remove", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4192, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4274, + "src": "6508:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + }, + "typeName": { + "id": 4191, + "name": "Bytes32Set", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4148, + "src": "6508:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4194, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4274, + "src": "6532:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4193, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6532:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6507:39:43" + }, + "returnParameters": { + "id": 4198, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4197, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4274, + "src": "6565:4:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4196, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6565:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6564:6:43" + }, + "scope": 4365, + "src": "6492:1467:43", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4291, + "nodeType": "Block", + "src": "8126:48:43", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4289, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "expression": { + "id": 4284, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4277, + "src": "8143:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4285, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 4147, + "src": "8143:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4287, + "indexExpression": { + "id": 4286, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4279, + "src": "8156:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8143:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 4288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8166:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8143:24:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4283, + "id": 4290, + "nodeType": "Return", + "src": "8136:31:43" + } + ] + }, + "documentation": { + "id": 4275, + "nodeType": "StructuredDocumentation", + "src": "7965:70:43", + "text": " @dev Returns true if the value is in the set. O(1)." + }, + "id": 4292, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "contains", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4280, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4277, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4292, + "src": "8058:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + }, + "typeName": { + "id": 4276, + "name": "Bytes32Set", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4148, + "src": "8058:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4279, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4292, + "src": "8082:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4278, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8082:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "8057:39:43" + }, + "returnParameters": { + "id": 4283, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4282, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4292, + "src": "8120:4:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4281, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8120:4:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8119:6:43" + }, + "scope": 4365, + "src": "8040:134:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4304, + "nodeType": "Block", + "src": "8327:42:43", + "statements": [ + { + "expression": { + "expression": { + "expression": { + "id": 4300, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4295, + "src": "8344:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4301, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "8344:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "8344:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4299, + "id": 4303, + "nodeType": "Return", + "src": "8337:25:43" + } + ] + }, + "documentation": { + "id": 4293, + "nodeType": "StructuredDocumentation", + "src": "8180:70:43", + "text": " @dev Returns the number of values on the set. O(1)." + }, + "id": 4305, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "length", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4296, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4295, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4305, + "src": "8271:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + }, + "typeName": { + "id": 4294, + "name": "Bytes32Set", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4148, + "src": "8271:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + } + }, + "visibility": "internal" + } + ], + "src": "8270:24:43" + }, + "returnParameters": { + "id": 4299, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4298, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4305, + "src": "8318:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8318:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8317:9:43" + }, + "scope": 4365, + "src": "8255:114:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4330, + "nodeType": "Block", + "src": "8794:116:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 4316, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4308, + "src": "8813:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4317, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "8813:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "8813:18:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 4319, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4310, + "src": "8834:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8813:26:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4321, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "8841:6:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 4322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 1094, + "src": "8841:20:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4315, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "8804:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8804:58:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4324, + "nodeType": "ExpressionStatement", + "src": "8804:58:43" + }, + { + "expression": { + "arguments": [ + { + "id": 4326, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4308, + "src": "8892:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + { + "id": 4327, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4310, + "src": "8897:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4325, + "name": "unchecked_at", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4123, + 4347 + ], + "referencedDeclaration": 4347, + "src": "8879:12:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Bytes32Set_$4148_storage_ptr_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (struct EnumerableSet.Bytes32Set storage pointer,uint256) view returns (bytes32)" + } + }, + "id": 4328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8879:24:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4314, + "id": 4329, + "nodeType": "Return", + "src": "8872:31:43" + } + ] + }, + "documentation": { + "id": 4306, + "nodeType": "StructuredDocumentation", + "src": "8375:331:43", + "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}." + }, + "id": 4331, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "at", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4311, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4308, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4331, + "src": "8723:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + }, + "typeName": { + "id": 4307, + "name": "Bytes32Set", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4148, + "src": "8723:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4310, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 4331, + "src": "8747:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4309, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8747:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8722:39:43" + }, + "returnParameters": { + "id": 4314, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4313, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4331, + "src": "8785:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4312, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8785:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "8784:9:43" + }, + "scope": 4365, + "src": "8711:199:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4346, + "nodeType": "Block", + "src": "9368:42:43", + "statements": [ + { + "expression": { + "baseExpression": { + "expression": { + "id": 4341, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4334, + "src": "9385:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4342, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_values", + "nodeType": "MemberAccess", + "referencedDeclaration": 4143, + "src": "9385:11:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", + "typeString": "bytes32[] storage ref" + } + }, + "id": 4344, + "indexExpression": { + "id": 4343, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4336, + "src": "9397:5:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9385:18:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4340, + "id": 4345, + "nodeType": "Return", + "src": "9378:25:43" + } + ] + }, + "documentation": { + "id": 4332, + "nodeType": "StructuredDocumentation", + "src": "8916:301:43", + "text": " @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n than {length}). O(1).\n This function performs one less storage read than {at}, but should only be used when `index` is known to be\n within bounds." + }, + "id": 4347, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "unchecked_at", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4337, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4334, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4347, + "src": "9297:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + }, + "typeName": { + "id": 4333, + "name": "Bytes32Set", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4148, + "src": "9297:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4336, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 4347, + "src": "9321:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4335, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9321:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9296:39:43" + }, + "returnParameters": { + "id": 4340, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4339, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4347, + "src": "9359:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4338, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9359:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "9358:9:43" + }, + "scope": 4365, + "src": "9275:135:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4363, + "nodeType": "Block", + "src": "9507:47:43", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "expression": { + "id": 4356, + "name": "set", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4349, + "src": "9524:3:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set storage pointer" + } + }, + "id": 4357, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "_indexes", + "nodeType": "MemberAccess", + "referencedDeclaration": 4147, + "src": "9524:12:43", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 4359, + "indexExpression": { + "id": 4358, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4351, + "src": "9537:5:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9524:19:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 4360, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9546:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9524:23:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4355, + "id": 4362, + "nodeType": "Return", + "src": "9517:30:43" + } + ] + }, + "id": 4364, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "rawIndexOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4352, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4349, + "mutability": "mutable", + "name": "set", + "nodeType": "VariableDeclaration", + "scope": 4364, + "src": "9436:22:43", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + }, + "typeName": { + "id": 4348, + "name": "Bytes32Set", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4148, + "src": "9436:10:43", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bytes32Set_$4148_storage_ptr", + "typeString": "struct EnumerableSet.Bytes32Set" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4351, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4364, + "src": "9460:13:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4350, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9460:7:43", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "9435:39:43" + }, + "returnParameters": { + "id": 4355, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4354, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4364, + "src": "9498:7:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4353, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9498:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9497:9:43" + }, + "scope": 4365, + "src": "9416:138:43", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4366, + "src": "1210:8346:43" + } + ], + "src": "406:9151:43" + }, + "id": 43 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "exportedSymbols": { + "ReentrancyGuard": [ + 4421 + ] + }, + "id": 4422, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4367, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "374:23:44" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 4368, + "nodeType": "ImportDirective", + "scope": 4422, + "sourceUnit": 1510, + "src": "399:90:44", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 4369, + "nodeType": "StructuredDocumentation", + "src": "491:750:44", + "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": 4421, + "linearizedBaseContracts": [ + 4421 + ], + "name": "ReentrancyGuard", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 4372, + "mutability": "constant", + "name": "_NOT_ENTERED", + "nodeType": "VariableDeclaration", + "scope": 4421, + "src": "2030:41:44", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2030:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 4371, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2070:1:44", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 4375, + "mutability": "constant", + "name": "_ENTERED", + "nodeType": "VariableDeclaration", + "scope": 4421, + "src": "2077:37:44", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4373, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2077:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 4374, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2113:1:44", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4377, + "mutability": "mutable", + "name": "_status", + "nodeType": "VariableDeclaration", + "scope": 4421, + "src": "2121:23:44", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2121:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 4384, + "nodeType": "Block", + "src": "2165:39:44", + "statements": [ + { + "expression": { + "id": 4382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4380, + "name": "_status", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4377, + "src": "2175:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4381, + "name": "_NOT_ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4372, + "src": "2185:12:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2175:22:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4383, + "nodeType": "ExpressionStatement", + "src": "2175:22:44" + } + ] + }, + "id": 4385, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4378, + "nodeType": "ParameterList", + "parameters": [], + "src": "2162:2:44" + }, + "returnParameters": { + "id": 4379, + "nodeType": "ParameterList", + "parameters": [], + "src": "2165:0:44" + }, + "scope": 4421, + "src": "2151:53:44", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4395, + "nodeType": "Block", + "src": "2603:77:44", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4388, + "name": "_enterNonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4412, + "src": "2613:18:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 4389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2613:20:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4390, + "nodeType": "ExpressionStatement", + "src": "2613:20:44" + }, + { + "id": 4391, + "nodeType": "PlaceholderStatement", + "src": "2643:1:44" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4392, + "name": "_exitNonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4420, + "src": "2654:17:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 4393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2654:19:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4394, + "nodeType": "ExpressionStatement", + "src": "2654:19:44" + } + ] + }, + "documentation": { + "id": 4386, + "nodeType": "StructuredDocumentation", + "src": "2210:364:44", + "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 make it call a\n `private` function that does the actual work." + }, + "id": 4396, + "name": "nonReentrant", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 4387, + "nodeType": "ParameterList", + "parameters": [], + "src": "2600:2:44" + }, + "src": "2579:101:44", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4411, + "nodeType": "Block", + "src": "2724:233:44", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4400, + "name": "_status", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4377, + "src": "2818:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 4401, + "name": "_ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4375, + "src": "2829:8:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2818:19:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4403, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2839:6:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 4404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "REENTRANCY", + "nodeType": "MemberAccess", + "referencedDeclaration": 1304, + "src": "2839:17:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4399, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2809:8:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2809:48:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4406, + "nodeType": "ExpressionStatement", + "src": "2809:48:44" + }, + { + "expression": { + "id": 4409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4407, + "name": "_status", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4377, + "src": "2932:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4408, + "name": "_ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4375, + "src": "2942:8:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2932:18:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4410, + "nodeType": "ExpressionStatement", + "src": "2932:18:44" + } + ] + }, + "id": 4412, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_enterNonReentrant", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4397, + "nodeType": "ParameterList", + "parameters": [], + "src": "2713:2:44" + }, + "returnParameters": { + "id": 4398, + "nodeType": "ParameterList", + "parameters": [], + "src": "2724:0:44" + }, + "scope": 4421, + "src": "2686:271:44", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 4419, + "nodeType": "Block", + "src": "3000:171:44", + "statements": [ + { + "expression": { + "id": 4417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4415, + "name": "_status", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4377, + "src": "3142:7:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4416, + "name": "_NOT_ENTERED", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4372, + "src": "3152:12:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3142:22:44", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4418, + "nodeType": "ExpressionStatement", + "src": "3142:22:44" + } + ] + }, + "id": 4420, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_exitNonReentrant", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4413, + "nodeType": "ParameterList", + "parameters": [], + "src": "2989:2:44" + }, + "returnParameters": { + "id": 4414, + "nodeType": "ParameterList", + "parameters": [], + "src": "3000:0:44" + }, + "scope": 4421, + "src": "2963:208:44", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 4422, + "src": "1242:1931:44" + } + ], + "src": "374:2800:44" + }, + "id": 44 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol", + "exportedSymbols": { + "SafeERC20": [ + 4516 + ] + }, + "id": 4517, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4423, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "313:23:45" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 4424, + "nodeType": "ImportDirective", + "scope": 4517, + "sourceUnit": 1510, + "src": "338:90:45", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 4425, + "nodeType": "ImportDirective", + "scope": 4517, + "sourceUnit": 1651, + "src": "429:87:45", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 4426, + "nodeType": "StructuredDocumentation", + "src": "518:457:45", + "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": 4516, + "linearizedBaseContracts": [ + 4516 + ], + "name": "SafeERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 4450, + "nodeType": "Block", + "src": "1102:112:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4438, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4428, + "src": "1140:5:45", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 4437, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1132:7:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4436, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1132:7:45", + "typeDescriptions": {} + } + }, + "id": 4439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1132:14:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 4442, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4428, + "src": "1171:5:45", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 4443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1599, + "src": "1171:14:45", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 4444, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "1171:23:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + { + "id": 4445, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4430, + "src": "1196:2:45", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4446, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4432, + "src": "1200:5:45", + "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": 4440, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1148:3:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4441, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "src": "1148:22:45", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 4447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1148:58:45", + "tryCall": false, + "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": 4435, + "name": "_callOptionalReturn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4515, + "src": "1112:19:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,bytes memory)" + } + }, + "id": 4448, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1112:95:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4449, + "nodeType": "ExpressionStatement", + "src": "1112:95:45" + } + ] + }, + "id": 4451, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeTransfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4428, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 4451, + "src": "1031:12:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 4427, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1031:6:45", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4430, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 4451, + "src": "1053:10:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4429, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1053:7:45", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4432, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4451, + "src": "1073:13:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1073:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1021:71:45" + }, + "returnParameters": { + "id": 4434, + "nodeType": "ParameterList", + "parameters": [], + "src": "1102:0:45" + }, + "scope": 4516, + "src": "1000:214:45", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4478, + "nodeType": "Block", + "src": "1348:122:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4465, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4453, + "src": "1386:5:45", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 4464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1378:7:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4463, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1378:7:45", + "typeDescriptions": {} + } + }, + "id": 4466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1378:14:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 4469, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4453, + "src": "1417:5:45", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 4470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1631, + "src": "1417:18:45", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 4471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "1417:27:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + { + "id": 4472, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4455, + "src": "1446:4:45", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4473, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4457, + "src": "1452:2:45", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4474, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4459, + "src": "1456:5:45", + "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": 4467, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1394:3:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4468, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "src": "1394:22:45", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 4475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1394:68:45", + "tryCall": false, + "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": 4462, + "name": "_callOptionalReturn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4515, + "src": "1358:19:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,bytes memory)" + } + }, + "id": 4476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1358:105:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4477, + "nodeType": "ExpressionStatement", + "src": "1358:105:45" + } + ] + }, + "id": 4479, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeTransferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4460, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4453, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 4479, + "src": "1255:12:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 4452, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1255:6:45", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4455, + "mutability": "mutable", + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 4479, + "src": "1277:12:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4454, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1277:7:45", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4457, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 4479, + "src": "1299:10:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4456, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1299:7:45", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4459, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 4479, + "src": "1319:13:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4458, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1319:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1245:93:45" + }, + "returnParameters": { + "id": 4461, + "nodeType": "ParameterList", + "parameters": [], + "src": "1348:0:45" + }, + "scope": 4516, + "src": "1220:250:45", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4514, + "nodeType": "Block", + "src": "1881:843:45", + "statements": [ + { + "assignments": [ + 4488, + 4490 + ], + "declarations": [ + { + "constant": false, + "id": 4488, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 4514, + "src": "2112:12:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4487, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2112:4:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4490, + "mutability": "mutable", + "name": "returndata", + "nodeType": "VariableDeclaration", + "scope": 4514, + "src": "2126:23:45", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4489, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2126:5:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 4495, + "initialValue": { + "arguments": [ + { + "id": 4493, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4484, + "src": "2164:4:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4491, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4482, + "src": "2153:5:45", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "2153:10:45", + "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": 4494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2153:16:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2111:58:45" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "2334:156:45", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2366:114:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2399:1:45", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2402:1:45", + "type": "", + "value": "0" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "2405:14:45" + }, + "nodeType": "YulFunctionCall", + "src": "2405:16:45" + } + ], + "functionName": { + "name": "returndatacopy", + "nodeType": "YulIdentifier", + "src": "2384:14:45" + }, + "nodeType": "YulFunctionCall", + "src": "2384:38:45" + }, + "nodeType": "YulExpressionStatement", + "src": "2384:38:45" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2446:1:45", + "type": "", + "value": "0" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "2449:14:45" + }, + "nodeType": "YulFunctionCall", + "src": "2449:16:45" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2439:6:45" + }, + "nodeType": "YulFunctionCall", + "src": "2439:27:45" + }, + "nodeType": "YulExpressionStatement", + "src": "2439:27:45" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "success", + "nodeType": "YulIdentifier", + "src": "2354:7:45" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2363:1:45", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "2351:2:45" + }, + "nodeType": "YulFunctionCall", + "src": "2351:14:45" + }, + "nodeType": "YulIf", + "src": "2348:2:45" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 4488, + "isOffset": false, + "isSlot": false, + "src": "2354:7:45", + "valueSize": 1 + } + ], + "id": 4496, + "nodeType": "InlineAssembly", + "src": "2325:165:45" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4498, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4490, + "src": "2629:10:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2629:17:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4500, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2650:1:45", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2629:22:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 4504, + "name": "returndata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4490, + "src": "2666:10:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 4506, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2679:4:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + }, + "typeName": { + "id": 4505, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2679:4:45", + "typeDescriptions": {} + } + } + ], + "id": 4507, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2678:6:45", + "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": 4502, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2655:3:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4503, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "2655:10:45", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2655:30:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2629:56:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4510, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "2687:6:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 4511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SAFE_ERC20_CALL_FAILED", + "nodeType": "MemberAccess", + "referencedDeclaration": 1358, + "src": "2687:29:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4497, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "2620:8:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2620:97:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4513, + "nodeType": "ExpressionStatement", + "src": "2620:97:45" + } + ] + }, + "documentation": { + "id": 4480, + "nodeType": "StructuredDocumentation", + "src": "1476:329:45", + "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 WARNING: `token` is assumed to be a contract: calls to EOAs will *not* revert." + }, + "id": 4515, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_callOptionalReturn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4485, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4482, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 4515, + "src": "1839:13:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4481, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1839:7:45", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4484, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 4515, + "src": "1854:17:45", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4483, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1854:5:45", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1838:34:45" + }, + "returnParameters": { + "id": 4486, + "nodeType": "ParameterList", + "parameters": [], + "src": "1881:0:45" + }, + "scope": 4516, + "src": "1810:914:45", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 4517, + "src": "976:1750:45" + } + ], + "src": "313:2414:45" + }, + "id": 45 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "exportedSymbols": { + "SafeMath": [ + 4594 + ] + }, + "id": 4595, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4518, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:46" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 4519, + "nodeType": "ImportDirective", + "scope": 4595, + "sourceUnit": 1510, + "src": "58:90:46", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 4520, + "nodeType": "StructuredDocumentation", + "src": "150:563:46", + "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow\n checks.\n Arithmetic operations in Solidity wrap on overflow. This can easily result\n in bugs, because programmers usually assume that an overflow raises an\n error, which is the standard behavior in high level programming languages.\n `SafeMath` restores this intuition by reverting the transaction when an\n operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always." + }, + "fullyImplemented": true, + "id": 4594, + "linearizedBaseContracts": [ + 4594 + ], + "name": "SafeMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 4546, + "nodeType": "Block", + "src": "1033:100:46", + "statements": [ + { + "assignments": [ + 4531 + ], + "declarations": [ + { + "constant": false, + "id": 4531, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 4546, + "src": "1043:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4530, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1043:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4535, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4532, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4523, + "src": "1055:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 4533, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4525, + "src": "1059:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1055:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1043:17:46" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4537, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4531, + "src": "1079:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 4538, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4523, + "src": "1084:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1079:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4540, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1087:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 4541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADD_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 1064, + "src": "1087:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4536, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "1070:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1070:37:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4543, + "nodeType": "ExpressionStatement", + "src": "1070:37:46" + }, + { + "expression": { + "id": 4544, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4531, + "src": "1125:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4529, + "id": 4545, + "nodeType": "Return", + "src": "1118:8:46" + } + ] + }, + "documentation": { + "id": 4521, + "nodeType": "StructuredDocumentation", + "src": "737:224:46", + "text": " @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow." + }, + "id": 4547, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4526, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4523, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 4547, + "src": "979:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4522, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "979:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4525, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 4547, + "src": "990:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4524, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "990:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "978:22:46" + }, + "returnParameters": { + "id": 4529, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4528, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4547, + "src": "1024:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4527, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1024:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1023:9:46" + }, + "scope": 4594, + "src": "966:167:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4564, + "nodeType": "Block", + "src": "1471:54:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4558, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4550, + "src": "1492:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4559, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4552, + "src": "1495:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 4560, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "1498:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 4561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SUB_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 1067, + "src": "1498:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4557, + "name": "sub", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4565, + 4593 + ], + "referencedDeclaration": 4593, + "src": "1488:3:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 4562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1488:30:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4556, + "id": 4563, + "nodeType": "Return", + "src": "1481:37:46" + } + ] + }, + "documentation": { + "id": 4548, + "nodeType": "StructuredDocumentation", + "src": "1139:260:46", + "text": " @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow." + }, + "id": 4565, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4553, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4550, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 4565, + "src": "1417:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4549, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1417:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4552, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 4565, + "src": "1428:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4551, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1428:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1416:22:46" + }, + "returnParameters": { + "id": 4556, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4555, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4565, + "src": "1462:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4554, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1462:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1461:9:46" + }, + "scope": 4594, + "src": "1404:121:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4592, + "nodeType": "Block", + "src": "1932:90:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4578, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4570, + "src": "1951:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 4579, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4568, + "src": "1956:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1951:6:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 4581, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4572, + "src": "1959:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4577, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "1942:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1942:27:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4583, + "nodeType": "ExpressionStatement", + "src": "1942:27:46" + }, + { + "assignments": [ + 4585 + ], + "declarations": [ + { + "constant": false, + "id": 4585, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 4592, + "src": "1979:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4584, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1979:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4589, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4586, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4568, + "src": "1991:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 4587, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4570, + "src": "1995:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1991:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1979:17:46" + }, + { + "expression": { + "id": 4590, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4585, + "src": "2014:1:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4576, + "id": 4591, + "nodeType": "Return", + "src": "2007:8:46" + } + ] + }, + "documentation": { + "id": 4566, + "nodeType": "StructuredDocumentation", + "src": "1531:280:46", + "text": " @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow." + }, + "id": 4593, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4573, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4568, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 4593, + "src": "1838:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4567, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1838:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4570, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 4593, + "src": "1857:9:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4569, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1857:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4572, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 4593, + "src": "1876:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4571, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1876:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1828:71:46" + }, + "returnParameters": { + "id": 4576, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4575, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4593, + "src": "1923:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4574, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1923:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1922:9:46" + }, + "scope": 4594, + "src": "1816:206:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4595, + "src": "714:1310:46" + } + ], + "src": "33:1992:46" + }, + "id": 46 + }, + "contracts/BalancerMinter.sol": { + "ast": { + "absolutePath": "contracts/BalancerMinter.sol", + "exportedSymbols": { + "BalancerMinter": [ + 5233 + ] + }, + "id": 5234, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4596, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:47" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol", + "id": 4597, + "nodeType": "ImportDirective", + "scope": 5234, + "sourceUnit": 176, + "src": "713:85:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "id": 4598, + "nodeType": "ImportDirective", + "scope": 5234, + "sourceUnit": 306, + "src": "799:89:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "id": 4599, + "nodeType": "ImportDirective", + "scope": 5234, + "sourceUnit": 721, + "src": "889:86:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "id": 4600, + "nodeType": "ImportDirective", + "scope": 5234, + "sourceUnit": 749, + "src": "976:85:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "id": 4601, + "nodeType": "ImportDirective", + "scope": 5234, + "sourceUnit": 4422, + "src": "1063:85:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "id": 4602, + "nodeType": "ImportDirective", + "scope": 5234, + "sourceUnit": 4595, + "src": "1149:78:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol", + "id": 4603, + "nodeType": "ImportDirective", + "scope": 5234, + "sourceUnit": 3225, + "src": "1228:76:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 4604, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1333:15:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "id": 4605, + "nodeType": "InheritanceSpecifier", + "src": "1333:15:47" + }, + { + "baseName": { + "id": 4606, + "name": "ReentrancyGuard", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4421, + "src": "1350:15:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ReentrancyGuard_$4421", + "typeString": "contract ReentrancyGuard" + } + }, + "id": 4607, + "nodeType": "InheritanceSpecifier", + "src": "1350:15:47" + }, + { + "baseName": { + "id": 4608, + "name": "EIP712", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3224, + "src": "1367:6:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712_$3224", + "typeString": "contract EIP712" + } + }, + "id": 4609, + "nodeType": "InheritanceSpecifier", + "src": "1367:6:47" + } + ], + "contractDependencies": [ + 175, + 3224, + 4421 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 5233, + "linearizedBaseContracts": [ + 5233, + 3224, + 4421, + 175 + ], + "name": "BalancerMinter", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4612, + "libraryName": { + "id": 4610, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4594, + "src": "1386:8:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$4594", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1380:27:47", + "typeName": { + "id": 4611, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1399:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 4614, + "mutability": "immutable", + "name": "_token", + "nodeType": "VariableDeclaration", + "scope": 5233, + "src": "1413:31:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 4613, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1413:6:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4616, + "mutability": "immutable", + "name": "_tokenAdmin", + "nodeType": "VariableDeclaration", + "scope": 5233, + "src": "1450:49:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + }, + "typeName": { + "id": 4615, + "name": "IBalancerTokenAdmin", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 305, + "src": "1450:19:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4618, + "mutability": "immutable", + "name": "_gaugeController", + "nodeType": "VariableDeclaration", + "scope": 5233, + "src": "1505:51:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 4617, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "1505:16:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4624, + "mutability": "mutable", + "name": "_minted", + "nodeType": "VariableDeclaration", + "scope": 5233, + "src": "1593:63:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "typeName": { + "id": 4623, + "keyType": { + "id": 4619, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1601:7:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1593:47:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "valueType": { + "id": 4622, + "keyType": { + "id": 4620, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1620:7:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1612:27:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 4621, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1631:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4630, + "mutability": "mutable", + "name": "_allowedMinter", + "nodeType": "VariableDeclaration", + "scope": 5233, + "src": "1697:67:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + }, + "typeName": { + "id": 4629, + "keyType": { + "id": 4625, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1705:7:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1697:44:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + }, + "valueType": { + "id": 4628, + "keyType": { + "id": 4626, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1724:7:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1716:24:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 4627, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1735:4:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4634, + "mutability": "mutable", + "name": "_nextNonce", + "nodeType": "VariableDeclaration", + "scope": 5233, + "src": "1828:47:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 4633, + "keyType": { + "id": 4631, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1836:7:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1828:27:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 4632, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1847:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4639, + "mutability": "immutable", + "name": "_SET_MINTER_APPROVAL_TYPEHASH", + "nodeType": "VariableDeclaration", + "scope": 5233, + "src": "1934:163:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4635, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1934:7:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "5365744d696e746572417070726f76616c2861646472657373206d696e7465722c626f6f6c20617070726f76616c2c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529", + "id": 4637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2011:80:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c87351a089bbdc3b2b9299d2ce29f08fd982826b275b3642939a2f7fdd815380", + "typeString": "literal_string \"SetMinterApproval(address minter,bool approval,uint256 nonce,uint256 deadline)\"" + }, + "value": "SetMinterApproval(address minter,bool approval,uint256 nonce,uint256 deadline)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c87351a089bbdc3b2b9299d2ce29f08fd982826b275b3642939a2f7fdd815380", + "typeString": "literal_string \"SetMinterApproval(address minter,bool approval,uint256 nonce,uint256 deadline)\"" + } + ], + "id": 4636, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1992:9:47", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4638, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1992:105:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 4647, + "name": "MinterApprovalSet", + "nodeType": "EventDefinition", + "parameters": { + "id": 4646, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4641, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4647, + "src": "2128:20:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4640, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2128:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4643, + "indexed": true, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 4647, + "src": "2150:22:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4642, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2150:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4645, + "indexed": false, + "mutability": "mutable", + "name": "approval", + "nodeType": "VariableDeclaration", + "scope": 4647, + "src": "2174:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4644, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2174:4:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2127:61:47" + }, + "src": "2104:85:47" + }, + { + "body": { + "id": 4672, + "nodeType": "Block", + "src": "2304:133:47", + "statements": [ + { + "expression": { + "id": 4662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4658, + "name": "_token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4614, + "src": "2314:6:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 4659, + "name": "tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4649, + "src": "2323:10:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 4660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getBalancerToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 284, + "src": "2323:27:47", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IBalancerToken_$252_$", + "typeString": "function () view external returns (contract IBalancerToken)" + } + }, + "id": 4661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2323:29:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "src": "2314:38:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 4663, + "nodeType": "ExpressionStatement", + "src": "2314:38:47" + }, + { + "expression": { + "id": 4666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4664, + "name": "_tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4616, + "src": "2362:11:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4665, + "name": "tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4649, + "src": "2376:10:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "src": "2362:24:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 4667, + "nodeType": "ExpressionStatement", + "src": "2362:24:47" + }, + { + "expression": { + "id": 4670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4668, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "2396:16:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4669, + "name": "gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4651, + "src": "2415:15:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "src": "2396:34:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 4671, + "nodeType": "ExpressionStatement", + "src": "2396:34:47" + } + ] + }, + "id": 4673, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "hexValue": "42616c616e636572204d696e746572", + "id": 4654, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2280:17:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_63c05625ac5a06c4bd34bf8f76d2a8cb0f02c3d329e03eae3da16e084ba60ddc", + "typeString": "literal_string \"Balancer Minter\"" + }, + "value": "Balancer Minter" + }, + { + "hexValue": "31", + "id": 4655, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2299:3:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + }, + "value": "1" + } + ], + "id": 4656, + "modifierName": { + "id": 4653, + "name": "EIP712", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3224, + "src": "2273:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EIP712_$3224_$", + "typeString": "type(contract EIP712)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2273:30:47" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4652, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4649, + "mutability": "mutable", + "name": "tokenAdmin", + "nodeType": "VariableDeclaration", + "scope": 4673, + "src": "2207:30:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + }, + "typeName": { + "id": 4648, + "name": "IBalancerTokenAdmin", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 305, + "src": "2207:19:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4651, + "mutability": "mutable", + "name": "gaugeController", + "nodeType": "VariableDeclaration", + "scope": 4673, + "src": "2239:32:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 4650, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "2239:16:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "internal" + } + ], + "src": "2206:66:47" + }, + "returnParameters": { + "id": 4657, + "nodeType": "ParameterList", + "parameters": [], + "src": "2304:0:47" + }, + "scope": 5233, + "src": "2195:242:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 4681, + "nodeType": "Block", + "src": "2505:44:47", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4678, + "name": "_domainSeparatorV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3195, + "src": "2522:18:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 4679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2522:20:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4677, + "id": 4680, + "nodeType": "Return", + "src": "2515:27:47" + } + ] + }, + "functionSelector": "ed24911d", + "id": 4682, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDomainSeparator", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4674, + "nodeType": "ParameterList", + "parameters": [], + "src": "2470:2:47" + }, + "returnParameters": { + "id": 4677, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4676, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4682, + "src": "2496:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4675, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2496:7:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2495:9:47" + }, + "scope": 5233, + "src": "2443:106:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 4693, + "nodeType": "Block", + "src": "2623:40:47", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 4689, + "name": "_nextNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "2640:10:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 4691, + "indexExpression": { + "id": 4690, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4684, + "src": "2651:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2640:16:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4688, + "id": 4692, + "nodeType": "Return", + "src": "2633:23:47" + } + ] + }, + "functionSelector": "90193b7c", + "id": 4694, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getNextNonce", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4685, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4684, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4694, + "src": "2577:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4683, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2577:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2576:14:47" + }, + "returnParameters": { + "id": 4688, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4687, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4694, + "src": "2614:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4686, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2614:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2613:9:47" + }, + "scope": 5233, + "src": "2555:108:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 46 + ], + "body": { + "id": 4703, + "nodeType": "Block", + "src": "2821:30:47", + "statements": [ + { + "expression": { + "id": 4701, + "name": "_token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4614, + "src": "2838:6:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "functionReturnParameters": 4700, + "id": 4702, + "nodeType": "Return", + "src": "2831:13:47" + } + ] + }, + "documentation": { + "id": 4695, + "nodeType": "StructuredDocumentation", + "src": "2669:79:47", + "text": " @notice Returns the address of the Balancer Governance Token" + }, + "functionSelector": "c0039699", + "id": 4704, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBalancerToken", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4697, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2795:8:47" + }, + "parameters": { + "id": 4696, + "nodeType": "ParameterList", + "parameters": [], + "src": "2778:2:47" + }, + "returnParameters": { + "id": 4700, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4699, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4704, + "src": "2813:6:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 4698, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2813:6:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2812:8:47" + }, + "scope": 5233, + "src": "2753:98:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 52 + ], + "body": { + "id": 4713, + "nodeType": "Block", + "src": "3031:35:47", + "statements": [ + { + "expression": { + "id": 4711, + "name": "_tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4616, + "src": "3048:11:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "functionReturnParameters": 4710, + "id": 4712, + "nodeType": "Return", + "src": "3041:18:47" + } + ] + }, + "documentation": { + "id": 4705, + "nodeType": "StructuredDocumentation", + "src": "2857:83:47", + "text": " @notice Returns the address of the Balancer Token Admin contract" + }, + "functionSelector": "e6dec36f", + "id": 4714, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBalancerTokenAdmin", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4707, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2992:8:47" + }, + "parameters": { + "id": 4706, + "nodeType": "ParameterList", + "parameters": [], + "src": "2975:2:47" + }, + "returnParameters": { + "id": 4710, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4709, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4714, + "src": "3010:19:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + }, + "typeName": { + "id": 4708, + "name": "IBalancerTokenAdmin", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 305, + "src": "3010:19:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "visibility": "internal" + } + ], + "src": "3009:21:47" + }, + "scope": 5233, + "src": "2945:121:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 58 + ], + "body": { + "id": 4723, + "nodeType": "Block", + "src": "3227:40:47", + "statements": [ + { + "expression": { + "id": 4721, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "3244:16:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "functionReturnParameters": 4720, + "id": 4722, + "nodeType": "Return", + "src": "3237:23:47" + } + ] + }, + "documentation": { + "id": 4715, + "nodeType": "StructuredDocumentation", + "src": "3072:70:47", + "text": " @notice Returns the address of the Gauge Controller" + }, + "functionSelector": "58de9ade", + "id": 4724, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeController", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4717, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3191:8:47" + }, + "parameters": { + "id": 4716, + "nodeType": "ParameterList", + "parameters": [], + "src": "3174:2:47" + }, + "returnParameters": { + "id": 4720, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4719, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4724, + "src": "3209:16:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 4718, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "3209:16:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "internal" + } + ], + "src": "3208:18:47" + }, + "scope": 5233, + "src": "3147:120:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 66 + ], + "body": { + "id": 4741, + "nodeType": "Block", + "src": "3518:51:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4736, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4727, + "src": "3544:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 4737, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3551:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3551:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4735, + "name": "_mintFor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5009, + "src": "3535:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) returns (uint256)" + } + }, + "id": 4739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3535:27:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4734, + "id": 4740, + "nodeType": "Return", + "src": "3528:34:47" + } + ] + }, + "documentation": { + "id": 4725, + "nodeType": "StructuredDocumentation", + "src": "3273:162:47", + "text": " @notice Mint everything which belongs to `msg.sender` and send to them\n @param gauge `LiquidityGauge` address to get mintable amount from" + }, + "functionSelector": "6a627842", + "id": 4742, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4731, + "modifierName": { + "id": 4730, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "3487:12:47", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3487:12:47" + } + ], + "name": "mint", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4729, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3478:8:47" + }, + "parameters": { + "id": 4728, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4727, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 4742, + "src": "3454:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4726, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3454:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3453:15:47" + }, + "returnParameters": { + "id": 4734, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4733, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4742, + "src": "3509:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4732, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3509:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3508:9:47" + }, + "scope": 5233, + "src": "3440:129:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 75 + ], + "body": { + "id": 4760, + "nodeType": "Block", + "src": "3825:56:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4755, + "name": "gauges", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4746, + "src": "3855:6:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + { + "expression": { + "id": 4756, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3863:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3863:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4754, + "name": "_mintForMany", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5061, + "src": "3842:12:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address[] calldata,address) returns (uint256)" + } + }, + "id": 4758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3842:32:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4753, + "id": 4759, + "nodeType": "Return", + "src": "3835:39:47" + } + ] + }, + "documentation": { + "id": 4743, + "nodeType": "StructuredDocumentation", + "src": "3575:151:47", + "text": " @notice Mint everything which belongs to `msg.sender` across multiple gauges\n @param gauges List of `LiquidityGauge` addresses" + }, + "functionSelector": "397ada21", + "id": 4761, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4750, + "modifierName": { + "id": 4749, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "3794:12:47", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3794:12:47" + } + ], + "name": "mintMany", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4748, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3785:8:47" + }, + "parameters": { + "id": 4747, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4746, + "mutability": "mutable", + "name": "gauges", + "nodeType": "VariableDeclaration", + "scope": 4761, + "src": "3749:25:47", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 4744, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3749:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4745, + "nodeType": "ArrayTypeName", + "src": "3749:9:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "3748:27:47" + }, + "returnParameters": { + "id": 4753, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4752, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4761, + "src": "3816:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4751, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3816:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3815:9:47" + }, + "scope": 5233, + "src": "3731:150:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 85 + ], + "body": { + "id": 4789, + "nodeType": "Block", + "src": "4243:135:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "baseExpression": { + "id": 4775, + "name": "_allowedMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "4261:14:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + } + }, + "id": 4778, + "indexExpression": { + "expression": { + "id": 4776, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4276:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4276:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4261:26:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4780, + "indexExpression": { + "id": 4779, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4766, + "src": "4288:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4261:32:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f722075736572", + "id": 4781, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4295:37:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_869d236cd21bde9ea7f9c1cef8a678cb12f22a7cdfb332a971891dd8f23ae5f8", + "typeString": "literal_string \"Caller not allowed to mint for user\"" + }, + "value": "Caller not allowed to mint for user" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_869d236cd21bde9ea7f9c1cef8a678cb12f22a7cdfb332a971891dd8f23ae5f8", + "typeString": "literal_string \"Caller not allowed to mint for user\"" + } + ], + "id": 4774, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4253:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4253:80:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4783, + "nodeType": "ExpressionStatement", + "src": "4253:80:47" + }, + { + "expression": { + "arguments": [ + { + "id": 4785, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4764, + "src": "4359:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4786, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4766, + "src": "4366:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4784, + "name": "_mintFor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5009, + "src": "4350:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) returns (uint256)" + } + }, + "id": 4787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4350:21:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4773, + "id": 4788, + "nodeType": "Return", + "src": "4343:28:47" + } + ] + }, + "documentation": { + "id": 4762, + "nodeType": "StructuredDocumentation", + "src": "3887:256:47", + "text": " @notice Mint tokens for `user`\n @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n @param gauge `LiquidityGauge` address to get mintable amount from\n @param user Address to mint to" + }, + "functionSelector": "7504a15d", + "id": 4790, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4770, + "modifierName": { + "id": 4769, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "4212:12:47", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4212:12:47" + } + ], + "name": "mintFor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4768, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4203:8:47" + }, + "parameters": { + "id": 4767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4764, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 4790, + "src": "4165:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4763, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4165:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4766, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4790, + "src": "4180:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4765, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4180:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4164:29:47" + }, + "returnParameters": { + "id": 4773, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4772, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4790, + "src": "4234:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4771, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4234:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4233:9:47" + }, + "scope": 5233, + "src": "4148:230:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 96 + ], + "body": { + "id": 4819, + "nodeType": "Block", + "src": "4762:140:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "baseExpression": { + "id": 4805, + "name": "_allowedMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "4780:14:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + } + }, + "id": 4808, + "indexExpression": { + "expression": { + "id": 4806, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4795:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4795:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4780:26:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4810, + "indexExpression": { + "id": 4809, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4807:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4780:32:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f722075736572", + "id": 4811, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4814:37:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_869d236cd21bde9ea7f9c1cef8a678cb12f22a7cdfb332a971891dd8f23ae5f8", + "typeString": "literal_string \"Caller not allowed to mint for user\"" + }, + "value": "Caller not allowed to mint for user" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_869d236cd21bde9ea7f9c1cef8a678cb12f22a7cdfb332a971891dd8f23ae5f8", + "typeString": "literal_string \"Caller not allowed to mint for user\"" + } + ], + "id": 4804, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4772:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4812, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4772:80:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4813, + "nodeType": "ExpressionStatement", + "src": "4772:80:47" + }, + { + "expression": { + "arguments": [ + { + "id": 4815, + "name": "gauges", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4794, + "src": "4882:6:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + { + "id": 4816, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4796, + "src": "4890:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4814, + "name": "_mintForMany", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5061, + "src": "4869:12:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address[] calldata,address) returns (uint256)" + } + }, + "id": 4817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4869:26:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4803, + "id": 4818, + "nodeType": "Return", + "src": "4862:33:47" + } + ] + }, + "documentation": { + "id": 4791, + "nodeType": "StructuredDocumentation", + "src": "4384:262:47", + "text": " @notice Mint tokens for `user` across multiple gauges\n @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n @param gauges List of `LiquidityGauge` addresses\n @param user Address to mint to" + }, + "functionSelector": "3b9f7384", + "id": 4820, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4800, + "modifierName": { + "id": 4799, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "4731:12:47", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4731:12:47" + } + ], + "name": "mintManyFor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4798, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4722:8:47" + }, + "parameters": { + "id": 4797, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4794, + "mutability": "mutable", + "name": "gauges", + "nodeType": "VariableDeclaration", + "scope": 4820, + "src": "4672:25:47", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 4792, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4672:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4793, + "nodeType": "ArrayTypeName", + "src": "4672:9:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4796, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4820, + "src": "4699:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4795, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4699:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4671:41:47" + }, + "returnParameters": { + "id": 4803, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4802, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4820, + "src": "4753:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4801, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4753:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4752:9:47" + }, + "scope": 5233, + "src": "4651:251:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 106 + ], + "body": { + "id": 4837, + "nodeType": "Block", + "src": "5083:44:47", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 4831, + "name": "_minted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4624, + "src": "5100:7:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 4833, + "indexExpression": { + "id": 4832, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4823, + "src": "5108:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5100:13:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 4835, + "indexExpression": { + "id": 4834, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4825, + "src": "5114:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5100:20:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4830, + "id": 4836, + "nodeType": "Return", + "src": "5093:27:47" + } + ] + }, + "documentation": { + "id": 4821, + "nodeType": "StructuredDocumentation", + "src": "4908:84:47", + "text": " @notice The total number of tokens minted for `user` from `gauge`" + }, + "functionSelector": "8b752bb0", + "id": 4838, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "minted", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4827, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5056:8:47" + }, + "parameters": { + "id": 4826, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4823, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4838, + "src": "5013:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4822, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5013:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4825, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 4838, + "src": "5027:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4824, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5027:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5012:29:47" + }, + "returnParameters": { + "id": 4830, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4829, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4838, + "src": "5074:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4828, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5074:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5073:9:47" + }, + "scope": 5233, + "src": "4997:130:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 116 + ], + "body": { + "id": 4855, + "nodeType": "Block", + "src": "5314:52:47", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 4849, + "name": "_allowedMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "5331:14:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + } + }, + "id": 4851, + "indexExpression": { + "id": 4850, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4841, + "src": "5346:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5331:22:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4853, + "indexExpression": { + "id": 4852, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4843, + "src": "5354:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5331:28:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4848, + "id": 4854, + "nodeType": "Return", + "src": "5324:35:47" + } + ] + }, + "documentation": { + "id": 4839, + "nodeType": "StructuredDocumentation", + "src": "5133:81:47", + "text": " @notice Whether `minter` is approved to mint tokens for `user`" + }, + "functionSelector": "3c543bc6", + "id": 4856, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getMinterApproval", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4845, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5290:8:47" + }, + "parameters": { + "id": 4844, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4841, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 4856, + "src": "5246:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4840, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5246:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4843, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4856, + "src": "5262:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4842, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5262:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5245:30:47" + }, + "returnParameters": { + "id": 4848, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4847, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4856, + "src": "5308:4:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4846, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5308:4:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5307:6:47" + }, + "scope": 5233, + "src": "5219:147:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 124 + ], + "body": { + "id": 4872, + "nodeType": "Block", + "src": "5540:65:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4866, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4859, + "src": "5569:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 4867, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5577:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5577:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 4869, + "name": "approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4861, + "src": "5589:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 4865, + "name": "_setMinterApproval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4980, + "src": "5550:18:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$", + "typeString": "function (address,address,bool)" + } + }, + "id": 4870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5550:48:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4871, + "nodeType": "ExpressionStatement", + "src": "5550:48:47" + } + ] + }, + "documentation": { + "id": 4857, + "nodeType": "StructuredDocumentation", + "src": "5372:89:47", + "text": " @notice Set whether `minter` is approved to mint tokens on your behalf" + }, + "functionSelector": "0de54ba0", + "id": 4873, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "setMinterApproval", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4863, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5531:8:47" + }, + "parameters": { + "id": 4862, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4859, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 4873, + "src": "5493:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4858, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5493:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4861, + "mutability": "mutable", + "name": "approval", + "nodeType": "VariableDeclaration", + "scope": 4873, + "src": "5509:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4860, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5509:4:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5492:31:47" + }, + "returnParameters": { + "id": 4864, + "nodeType": "ParameterList", + "parameters": [], + "src": "5540:0:47" + }, + "scope": 5233, + "src": "5466:139:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 142 + ], + "body": { + "id": 4955, + "nodeType": "Block", + "src": "5975:666:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4893, + "name": "deadline", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4882, + "src": "6047:8:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 4894, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6058:5:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 4895, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6058:15:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6047:26:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5369676e61747572652065787069726564", + "id": 4897, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6075:19:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_99132f8bb903a5d9600420e3899938d8bfd8aa30795f8fee460656e87dd9c517", + "typeString": "literal_string \"Signature expired\"" + }, + "value": "Signature expired" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_99132f8bb903a5d9600420e3899938d8bfd8aa30795f8fee460656e87dd9c517", + "typeString": "literal_string \"Signature expired\"" + } + ], + "id": 4892, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6039:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6039:56:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4899, + "nodeType": "ExpressionStatement", + "src": "6039:56:47" + }, + { + "assignments": [ + 4901 + ], + "declarations": [ + { + "constant": false, + "id": 4901, + "mutability": "mutable", + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "6106:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4900, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6106:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4906, + "initialValue": { + "id": 4905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "6122:18:47", + "subExpression": { + "baseExpression": { + "id": 4902, + "name": "_nextNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4634, + "src": "6122:10:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 4904, + "indexExpression": { + "id": 4903, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4880, + "src": "6133:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6122:16:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6106:34:47" + }, + { + "assignments": [ + 4908 + ], + "declarations": [ + { + "constant": false, + "id": 4908, + "mutability": "mutable", + "name": "structHash", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "6151:18:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4907, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6151:7:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 4919, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 4912, + "name": "_SET_MINTER_APPROVAL_TYPEHASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4639, + "src": "6193:29:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 4913, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4876, + "src": "6224:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4914, + "name": "approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "6232:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 4915, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4901, + "src": "6242:5:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4916, + "name": "deadline", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4882, + "src": "6249:8:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4910, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "6182:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4911, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "6182:10:47", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6182:76:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4909, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "6172:9:47", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6172:87:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6151:108:47" + }, + { + "assignments": [ + 4921 + ], + "declarations": [ + { + "constant": false, + "id": 4921, + "mutability": "mutable", + "name": "digest", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "6269:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4920, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6269:7:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 4925, + "initialValue": { + "arguments": [ + { + "id": 4923, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4908, + "src": "6303:10:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4922, + "name": "_hashTypedDataV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3214, + "src": "6286:16:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + "id": 4924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6286:28:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6269:45:47" + }, + { + "assignments": [ + 4927 + ], + "declarations": [ + { + "constant": false, + "id": 4927, + "mutability": "mutable", + "name": "recoveredAddress", + "nodeType": "VariableDeclaration", + "scope": 4955, + "src": "6325:24:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4926, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6325:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4934, + "initialValue": { + "arguments": [ + { + "id": 4929, + "name": "digest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4921, + "src": "6362:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 4930, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4884, + "src": "6370:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 4931, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4886, + "src": "6373:1:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 4932, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4888, + "src": "6376:1:47", + "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": 4928, + "name": "ecrecover", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -6, + "src": "6352:9:47", + "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": 4933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6352:26:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6325:53:47" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4941, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4936, + "name": "recoveredAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "6501:16:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4939, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6529:1:47", + "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": 4938, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6521:7:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4937, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6521:7:47", + "typeDescriptions": {} + } + }, + "id": 4940, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6521:10:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "6501:30:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4942, + "name": "recoveredAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4927, + "src": "6535:16:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 4943, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4880, + "src": "6555:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6535:24:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6501:58:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964207369676e6174757265", + "id": 4946, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6561:19:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7", + "typeString": "literal_string \"Invalid signature\"" + }, + "value": "Invalid signature" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7", + "typeString": "literal_string \"Invalid signature\"" + } + ], + "id": 4935, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6493:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4947, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6493:88:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4948, + "nodeType": "ExpressionStatement", + "src": "6493:88:47" + }, + { + "expression": { + "arguments": [ + { + "id": 4950, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4876, + "src": "6611:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4951, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4880, + "src": "6619:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4952, + "name": "approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4878, + "src": "6625:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 4949, + "name": "_setMinterApproval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4980, + "src": "6592:18:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$", + "typeString": "function (address,address,bool)" + } + }, + "id": 4953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6592:42:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4954, + "nodeType": "ExpressionStatement", + "src": "6592:42:47" + } + ] + }, + "documentation": { + "id": 4874, + "nodeType": "StructuredDocumentation", + "src": "5611:145:47", + "text": " @notice Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing\n them." + }, + "functionSelector": "c6542794", + "id": 4956, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "setMinterApprovalWithSignature", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4890, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5966:8:47" + }, + "parameters": { + "id": 4889, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4876, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 4956, + "src": "5810:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4875, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5810:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4878, + "mutability": "mutable", + "name": "approval", + "nodeType": "VariableDeclaration", + "scope": 4956, + "src": "5834:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4877, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5834:4:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4880, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4956, + "src": "5857:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4879, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5857:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4882, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 4956, + "src": "5879:16:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4881, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5879:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4884, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 4956, + "src": "5905:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 4883, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "5905:5:47", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4886, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 4956, + "src": "5922:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4885, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5922:7:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4888, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 4956, + "src": "5941:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4887, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5941:7:47", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5800:156:47" + }, + "returnParameters": { + "id": 4891, + "nodeType": "ParameterList", + "parameters": [], + "src": "5975:0:47" + }, + "scope": 5233, + "src": "5761:880:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 4979, + "nodeType": "Block", + "src": "6758:112:47", + "statements": [ + { + "expression": { + "id": 4971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 4965, + "name": "_allowedMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "6768:14:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + } + }, + "id": 4968, + "indexExpression": { + "id": 4966, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4958, + "src": "6783:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6768:22:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4969, + "indexExpression": { + "id": 4967, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4960, + "src": "6791:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6768:28:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4970, + "name": "approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4962, + "src": "6799:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6768:39:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4972, + "nodeType": "ExpressionStatement", + "src": "6768:39:47" + }, + { + "eventCall": { + "arguments": [ + { + "id": 4974, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4960, + "src": "6840:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4975, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4958, + "src": "6846:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4976, + "name": "approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4962, + "src": "6854:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 4973, + "name": "MinterApprovalSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4647, + "src": "6822:17:47", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$", + "typeString": "function (address,address,bool)" + } + }, + "id": 4977, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6822:41:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4978, + "nodeType": "EmitStatement", + "src": "6817:46:47" + } + ] + }, + "id": 4980, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setMinterApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4963, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4958, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 4980, + "src": "6684:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4957, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6684:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4960, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 4980, + "src": "6708:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4959, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6708:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4962, + "mutability": "mutable", + "name": "approval", + "nodeType": "VariableDeclaration", + "scope": 4980, + "src": "6730:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4961, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6730:4:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6674:75:47" + }, + "returnParameters": { + "id": 4964, + "nodeType": "ParameterList", + "parameters": [], + "src": "6758:0:47" + }, + "scope": 5233, + "src": "6647:223:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 5008, + "nodeType": "Block", + "src": "6990:149:47", + "statements": [ + { + "expression": { + "id": 4994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4989, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4987, + "src": "7000:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4991, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4982, + "src": "7028:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4992, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4984, + "src": "7035:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4990, + "name": "_updateGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5127, + "src": "7015:12:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) returns (uint256)" + } + }, + "id": 4993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7015:25:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7000:40:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4995, + "nodeType": "ExpressionStatement", + "src": "7000:40:47" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4996, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4987, + "src": "7054:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 4997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7069:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7054:16:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5007, + "nodeType": "IfStatement", + "src": "7050:83:47", + "trueBody": { + "id": 5006, + "nodeType": "Block", + "src": "7072:61:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5002, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4984, + "src": "7103:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5003, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4987, + "src": "7109:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4999, + "name": "_tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4616, + "src": "7086:11:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 5001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mint", + "nodeType": "MemberAccess", + "referencedDeclaration": 304, + "src": "7086:16:47", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256) external" + } + }, + "id": 5004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7086:36:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5005, + "nodeType": "ExpressionStatement", + "src": "7086:36:47" + } + ] + } + } + ] + }, + "id": 5009, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mintFor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4985, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4982, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 5009, + "src": "6921:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4981, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6921:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4984, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 5009, + "src": "6936:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4983, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6936:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6920:29:47" + }, + "returnParameters": { + "id": 4988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4987, + "mutability": "mutable", + "name": "tokensToMint", + "nodeType": "VariableDeclaration", + "scope": 5009, + "src": "6968:20:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4986, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6968:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6967:22:47" + }, + "scope": 5233, + "src": "6903:236:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5060, + "nodeType": "Block", + "src": "7248:273:47", + "statements": [ + { + "assignments": [ + 5020 + ], + "declarations": [ + { + "constant": false, + "id": 5020, + "mutability": "mutable", + "name": "length", + "nodeType": "VariableDeclaration", + "scope": 5060, + "src": "7258:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5019, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7258:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5023, + "initialValue": { + "expression": { + "id": 5021, + "name": "gauges", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5012, + "src": "7275:6:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 5022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7275:13:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7258:30:47" + }, + { + "body": { + "id": 5046, + "nodeType": "Block", + "src": "7335:87:47", + "statements": [ + { + "expression": { + "id": 5044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5034, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5017, + "src": "7349:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 5038, + "name": "gauges", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5012, + "src": "7394:6:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 5040, + "indexExpression": { + "id": 5039, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5025, + "src": "7401:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7394:9:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5041, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5014, + "src": "7405:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5037, + "name": "_updateGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5127, + "src": "7381:12:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) returns (uint256)" + } + }, + "id": 5042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7381:29:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5035, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5017, + "src": "7364:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 4547, + "src": "7364:16:47", + "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": 5043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7364:47:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7349:62:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5045, + "nodeType": "ExpressionStatement", + "src": "7349:62:47" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5028, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5025, + "src": "7318:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5029, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5020, + "src": "7322:6:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7318:10:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5047, + "initializationExpression": { + "assignments": [ + 5025 + ], + "declarations": [ + { + "constant": false, + "id": 5025, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5047, + "src": "7303:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5024, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7303:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5027, + "initialValue": { + "hexValue": "30", + "id": 5026, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7315:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7303:13:47" + }, + "loopExpression": { + "expression": { + "id": 5032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "7330:3:47", + "subExpression": { + "id": 5031, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5025, + "src": "7332:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5033, + "nodeType": "ExpressionStatement", + "src": "7330:3:47" + }, + "nodeType": "ForStatement", + "src": "7298:124:47" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5050, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5048, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5017, + "src": "7436:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 5049, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7451:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7436:16:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5059, + "nodeType": "IfStatement", + "src": "7432:83:47", + "trueBody": { + "id": 5058, + "nodeType": "Block", + "src": "7454:61:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5054, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5014, + "src": "7485:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5055, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5017, + "src": "7491:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5051, + "name": "_tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4616, + "src": "7468:11:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 5053, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mint", + "nodeType": "MemberAccess", + "referencedDeclaration": 304, + "src": "7468:16:47", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256) external" + } + }, + "id": 5056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7468:36:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5057, + "nodeType": "ExpressionStatement", + "src": "7468:36:47" + } + ] + } + } + ] + }, + "id": 5061, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mintForMany", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5015, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5012, + "mutability": "mutable", + "name": "gauges", + "nodeType": "VariableDeclaration", + "scope": 5061, + "src": "7167:25:47", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 5010, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7167:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5011, + "nodeType": "ArrayTypeName", + "src": "7167:9:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5014, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 5061, + "src": "7194:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5013, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7194:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7166:41:47" + }, + "returnParameters": { + "id": 5018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5017, + "mutability": "mutable", + "name": "tokensToMint", + "nodeType": "VariableDeclaration", + "scope": 5061, + "src": "7226:20:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5016, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7226:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7225:22:47" + }, + "scope": 5233, + "src": "7145:376:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5126, + "nodeType": "Block", + "src": "7618:434:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "id": 5076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 5073, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5063, + "src": "7665:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5071, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4618, + "src": "7636:16:47", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 5072, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "gauge_types", + "nodeType": "MemberAccess", + "referencedDeclaration": 714, + "src": "7636:28:47", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_int128_$", + "typeString": "function (address) view external returns (int128)" + } + }, + "id": 5074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7636:35:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 5075, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7675:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7636:40:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520646f6573206e6f74206578697374206f6e20436f6e74726f6c6c6572", + "id": 5077, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7678:36:47", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e44889d5b2f7492cbae17d1caabb9cae7b136932b333dfd4635f726a9e80f227", + "typeString": "literal_string \"Gauge does not exist on Controller\"" + }, + "value": "Gauge does not exist on Controller" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e44889d5b2f7492cbae17d1caabb9cae7b136932b333dfd4635f726a9e80f227", + "typeString": "literal_string \"Gauge does not exist on Controller\"" + } + ], + "id": 5070, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7628:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7628:87:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5079, + "nodeType": "ExpressionStatement", + "src": "7628:87:47" + }, + { + "expression": { + "arguments": [ + { + "id": 5084, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5065, + "src": "7765:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 5081, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5063, + "src": "7742:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5080, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "7726:15:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 5082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7726:22:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "id": 5083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "user_checkpoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 736, + "src": "7726:38:47", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bool_$", + "typeString": "function (address) external returns (bool)" + } + }, + "id": 5085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7726:44:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5086, + "nodeType": "ExpressionStatement", + "src": "7726:44:47" + }, + { + "assignments": [ + 5088 + ], + "declarations": [ + { + "constant": false, + "id": 5088, + "mutability": "mutable", + "name": "totalMint", + "nodeType": "VariableDeclaration", + "scope": 5126, + "src": "7780:17:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5087, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7780:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5095, + "initialValue": { + "arguments": [ + { + "id": 5093, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5065, + "src": "7842:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 5090, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5063, + "src": "7816:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5089, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "7800:15:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 5091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7800:22:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "id": 5092, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "integrate_fraction", + "nodeType": "MemberAccess", + "referencedDeclaration": 729, + "src": "7800:41:47", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 5094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7800:47:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7780:67:47" + }, + { + "expression": { + "id": 5105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5096, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "7857:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "baseExpression": { + "id": 5099, + "name": "_minted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4624, + "src": "7886:7:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 5101, + "indexExpression": { + "id": 5100, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5065, + "src": "7894:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7886:13:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 5103, + "indexExpression": { + "id": 5102, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5063, + "src": "7900:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7886:20:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5097, + "name": "totalMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5088, + "src": "7872:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4565, + "src": "7872:13:47", + "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": 5104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7872:35:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7857:50:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5106, + "nodeType": "ExpressionStatement", + "src": "7857:50:47" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5107, + "name": "tokensToMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "7922:12:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 5108, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7937:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7922:16:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5125, + "nodeType": "IfStatement", + "src": "7918:128:47", + "trueBody": { + "id": 5124, + "nodeType": "Block", + "src": "7940:106:47", + "statements": [ + { + "expression": { + "id": 5116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 5110, + "name": "_minted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4624, + "src": "7954:7:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 5113, + "indexExpression": { + "id": 5111, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5065, + "src": "7962:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7954:13:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 5114, + "indexExpression": { + "id": 5112, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5063, + "src": "7968:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7954:20:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5115, + "name": "totalMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5088, + "src": "7977:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7954:32:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5117, + "nodeType": "ExpressionStatement", + "src": "7954:32:47" + }, + { + "eventCall": { + "arguments": [ + { + "id": 5119, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5065, + "src": "8012:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5120, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5063, + "src": "8018:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5121, + "name": "totalMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5088, + "src": "8025:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5118, + "name": "Minted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40, + "src": "8005:6:47", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 5122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8005:30:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5123, + "nodeType": "EmitStatement", + "src": "8000:35:47" + } + ] + } + } + ] + }, + "id": 5127, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5066, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5063, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 5127, + "src": "7549:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5062, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7549:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5065, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 5127, + "src": "7564:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5064, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7564:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7548:29:47" + }, + "returnParameters": { + "id": 5069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5068, + "mutability": "mutable", + "name": "tokensToMint", + "nodeType": "VariableDeclaration", + "scope": 5127, + "src": "7596:20:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5067, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7596:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7595:22:47" + }, + "scope": 5233, + "src": "7527:525:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 152 + ], + "body": { + "id": 5144, + "nodeType": "Block", + "src": "8455:52:47", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 5138, + "name": "_allowedMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "8472:14:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + } + }, + "id": 5140, + "indexExpression": { + "id": 5139, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "8487:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8472:22:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 5142, + "indexExpression": { + "id": 5141, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5132, + "src": "8495:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8472:28:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5137, + "id": 5143, + "nodeType": "Return", + "src": "8465:35:47" + } + ] + }, + "documentation": { + "id": 5128, + "nodeType": "StructuredDocumentation", + "src": "8272:81:47", + "text": " @notice Whether `minter` is approved to mint tokens for `user`" + }, + "functionSelector": "a0990033", + "id": 5145, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowed_to_mint_for", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5134, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8431:8:47" + }, + "parameters": { + "id": 5133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5130, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 5145, + "src": "8387:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5129, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8387:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5132, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 5145, + "src": "8403:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5131, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8403:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8386:30:47" + }, + "returnParameters": { + "id": 5137, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5136, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5145, + "src": "8449:4:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5135, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8449:4:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8448:6:47" + }, + "scope": 5233, + "src": "8358:149:47", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 160 + ], + "body": { + "id": 5187, + "nodeType": "Block", + "src": "8843:184:47", + "statements": [ + { + "body": { + "id": 5185, + "nodeType": "Block", + "src": "8885:136:47", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 5166, + "name": "gauges", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5150, + "src": "8903:6:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_calldata_ptr", + "typeString": "address[8] calldata" + } + }, + "id": 5168, + "indexExpression": { + "id": 5167, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5157, + "src": "8910:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8903:9:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 5171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8924:1:47", + "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": 5170, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8916:7:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5169, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8916:7:47", + "typeDescriptions": {} + } + }, + "id": 5172, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8916:10:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "8903:23:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5176, + "nodeType": "IfStatement", + "src": "8899:67:47", + "trueBody": { + "id": 5175, + "nodeType": "Block", + "src": "8928:38:47", + "statements": [ + { + "id": 5174, + "nodeType": "Break", + "src": "8946:5:47" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 5178, + "name": "gauges", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5150, + "src": "8988:6:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_calldata_ptr", + "typeString": "address[8] calldata" + } + }, + "id": 5180, + "indexExpression": { + "id": 5179, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5157, + "src": "8995:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8988:9:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 5181, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "8999:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "8999:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 5177, + "name": "_mintFor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5009, + "src": "8979:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) returns (uint256)" + } + }, + "id": 5183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8979:31:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5184, + "nodeType": "ExpressionStatement", + "src": "8979:31:47" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5160, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5157, + "src": "8873:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "38", + "id": 5161, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8877:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "8873:5:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5186, + "initializationExpression": { + "assignments": [ + 5157 + ], + "declarations": [ + { + "constant": false, + "id": 5157, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5186, + "src": "8858:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5156, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8858:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5159, + "initialValue": { + "hexValue": "30", + "id": 5158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8870:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8858:13:47" + }, + "loopExpression": { + "expression": { + "id": 5164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "8880:3:47", + "subExpression": { + "id": 5163, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5157, + "src": "8882:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5165, + "nodeType": "ExpressionStatement", + "src": "8880:3:47" + }, + "nodeType": "ForStatement", + "src": "8853:168:47" + } + ] + }, + "documentation": { + "id": 5146, + "nodeType": "StructuredDocumentation", + "src": "8513:247:47", + "text": " @notice Mint everything which belongs to `msg.sender` across multiple gauges\n @dev This function is not recommended as `mintMany()` is more flexible and gas efficient\n @param gauges List of `LiquidityGauge` addresses" + }, + "functionSelector": "a51e1904", + "id": 5188, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5154, + "modifierName": { + "id": 5153, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "8830:12:47", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8830:12:47" + } + ], + "name": "mint_many", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5152, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8821:8:47" + }, + "parameters": { + "id": 5151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5150, + "mutability": "mutable", + "name": "gauges", + "nodeType": "VariableDeclaration", + "scope": 5188, + "src": "8784:26:47", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_calldata_ptr", + "typeString": "address[8]" + }, + "typeName": { + "baseType": { + "id": 5147, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8784:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5149, + "length": { + "hexValue": "38", + "id": 5148, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8792:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "8784:10:47", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$8_storage_ptr", + "typeString": "address[8]" + } + }, + "visibility": "internal" + } + ], + "src": "8783:28:47" + }, + "returnParameters": { + "id": 5155, + "nodeType": "ParameterList", + "parameters": [], + "src": "8843:0:47" + }, + "scope": 5233, + "src": "8765:262:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 168 + ], + "body": { + "id": 5212, + "nodeType": "Block", + "src": "9372:100:47", + "statements": [ + { + "condition": { + "baseExpression": { + "baseExpression": { + "id": 5199, + "name": "_allowedMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "9386:14:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + } + }, + "id": 5202, + "indexExpression": { + "expression": { + "id": 5200, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "9401:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "9401:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9386:26:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 5204, + "indexExpression": { + "id": 5203, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5193, + "src": "9413:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9386:32:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5211, + "nodeType": "IfStatement", + "src": "9382:84:47", + "trueBody": { + "id": 5210, + "nodeType": "Block", + "src": "9420:46:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5206, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5191, + "src": "9443:5:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5207, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5193, + "src": "9450:4:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 5205, + "name": "_mintFor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5009, + "src": "9434:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) returns (uint256)" + } + }, + "id": 5208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9434:21:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5209, + "nodeType": "ExpressionStatement", + "src": "9434:21:47" + } + ] + } + } + ] + }, + "documentation": { + "id": 5189, + "nodeType": "StructuredDocumentation", + "src": "9033:256:47", + "text": " @notice Mint tokens for `user`\n @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf\n @param gauge `LiquidityGauge` address to get mintable amount from\n @param user Address to mint to" + }, + "functionSelector": "27f18ae3", + "id": 5213, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5197, + "modifierName": { + "id": 5196, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "9359:12:47", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "9359:12:47" + } + ], + "name": "mint_for", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5195, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9350:8:47" + }, + "parameters": { + "id": 5194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5191, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 5213, + "src": "9312:13:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5190, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9312:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5193, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 5213, + "src": "9327:12:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5192, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9327:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9311:29:47" + }, + "returnParameters": { + "id": 5198, + "nodeType": "ParameterList", + "parameters": [], + "src": "9372:0:47" + }, + "scope": 5233, + "src": "9294:178:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 174 + ], + "body": { + "id": 5231, + "nodeType": "Block", + "src": "9634:79:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5221, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5216, + "src": "9662:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9670:35:47", + "subExpression": { + "baseExpression": { + "baseExpression": { + "id": 5222, + "name": "_allowedMinter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "9671:14:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(address => mapping(address => bool))" + } + }, + "id": 5224, + "indexExpression": { + "id": 5223, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5216, + "src": "9686:6:47", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9671:22:47", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 5227, + "indexExpression": { + "expression": { + "id": 5225, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "9694:3:47", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "9694:10:47", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9671:34:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 5220, + "name": "setMinterApproval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4873, + "src": "9644:17:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$", + "typeString": "function (address,bool)" + } + }, + "id": 5229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9644:62:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5230, + "nodeType": "ExpressionStatement", + "src": "9644:62:47" + } + ] + }, + "documentation": { + "id": 5214, + "nodeType": "StructuredDocumentation", + "src": "9478:88:47", + "text": " @notice Toggle whether `minter` is approved to mint tokens for `user`" + }, + "functionSelector": "dd289d60", + "id": 5232, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toggle_approve_mint", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5218, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9625:8:47" + }, + "parameters": { + "id": 5217, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5216, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 5232, + "src": "9600:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5215, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9600:7:47", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9599:16:47" + }, + "returnParameters": { + "id": 5219, + "nodeType": "ParameterList", + "parameters": [], + "src": "9634:0:47" + }, + "scope": 5233, + "src": "9571:142:47", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 5234, + "src": "1306:8409:47" + } + ], + "src": "688:9028:47" + }, + "id": 47 + }, + "contracts/BalancerTokenAdmin.sol": { + "ast": { + "absolutePath": "contracts/BalancerTokenAdmin.sol", + "exportedSymbols": { + "BalancerTokenAdmin": [ + 6117 + ] + }, + "id": 6118, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5235, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:48" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "id": 5236, + "nodeType": "ImportDirective", + "scope": 6118, + "sourceUnit": 306, + "src": "713:89:48", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "id": 5237, + "nodeType": "ImportDirective", + "scope": 6118, + "sourceUnit": 2573, + "src": "804:88:48", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "id": 5238, + "nodeType": "ImportDirective", + "scope": 6118, + "sourceUnit": 4422, + "src": "893:85:48", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "id": 5239, + "nodeType": "ImportDirective", + "scope": 6118, + "sourceUnit": 2366, + "src": "979:79:48", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "id": 5240, + "nodeType": "ImportDirective", + "scope": 6118, + "sourceUnit": 2885, + "src": "1059:66:48", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 5242, + "name": "IBalancerTokenAdmin", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 305, + "src": "1941:19:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 5243, + "nodeType": "InheritanceSpecifier", + "src": "1941:19:48" + }, + { + "baseName": { + "id": 5244, + "name": "SingletonAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2572, + "src": "1962:23:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + }, + "id": 5245, + "nodeType": "InheritanceSpecifier", + "src": "1962:23:48" + }, + { + "baseName": { + "id": 5246, + "name": "ReentrancyGuard", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4421, + "src": "1987:15:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ReentrancyGuard_$4421", + "typeString": "contract ReentrancyGuard" + } + }, + "id": 5247, + "nodeType": "InheritanceSpecifier", + "src": "1987:15:48" + } + ], + "contractDependencies": [ + 305, + 1520, + 2365, + 2572, + 4421 + ], + "contractKind": "contract", + "documentation": { + "id": 5241, + "nodeType": "StructuredDocumentation", + "src": "1164:745:48", + "text": " @title Balancer Token Admin\n @notice This contract holds all admin powers over the BAL token passing through calls\n while delegating access control to the Balancer Authorizer\n In addition, calls to the mint function must respect the inflation schedule as defined in this contract.\n As this contract is the only way to mint BAL tokens this ensures that the maximum allowed supply is enforced\n @dev This contract exists as a consequence of the gauge systems needing to know a fixed inflation schedule\n in order to know how much BAL a gauge is allowed to mint. As this does not exist within the BAL token itself\n it is defined here, we must then wrap the token's minting functionality in order for this to be meaningful." + }, + "fullyImplemented": true, + "id": 6117, + "linearizedBaseContracts": [ + 6117, + 4421, + 2572, + 2365, + 305, + 1520 + ], + "name": "BalancerTokenAdmin", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 5250, + "libraryName": { + "id": 5248, + "name": "Math", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2884, + "src": "2015:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Math_$2884", + "typeString": "library Math" + } + }, + "nodeType": "UsingForDirective", + "src": "2009:23:48", + "typeName": { + "id": 5249, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2024:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "baseFunctions": [ + 263 + ], + "constant": true, + "functionSelector": "4dbac733", + "id": 5262, + "mutability": "constant", + "name": "INITIAL_RATE", + "nodeType": "VariableDeclaration", + "overrides": { + "id": 5252, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2114:8:48" + }, + "scope": 6117, + "src": "2090:82:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5251, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2090:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5261, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_rational_145000000000000000000000_by_1", + "typeString": "int_const 145000000000000000000000" + }, + "id": 5255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "313435303030", + "id": 5253, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2139:6:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_145000_by_1", + "typeString": "int_const 145000" + }, + "value": "145000" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "31653138", + "id": 5254, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2148:4:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "src": "2139:13:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_145000000000000000000000_by_1", + "typeString": "int_const 145000000000000000000000" + } + } + ], + "id": 5256, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2138:15:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_145000000000000000000000_by_1", + "typeString": "int_const 145000000000000000000000" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "arguments": [ + { + "hexValue": "31", + "id": 5259, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2164:7:48", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + } + ], + "id": 5258, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2156:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 5257, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2156:7:48", + "typeDescriptions": {} + } + }, + "id": 5260, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2156:16:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2138:34:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "baseFunctions": [ + 268 + ], + "constant": true, + "functionSelector": "b87b5616", + "id": 5266, + "mutability": "constant", + "name": "RATE_REDUCTION_TIME", + "nodeType": "VariableDeclaration", + "overrides": { + "id": 5264, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2225:8:48" + }, + "scope": 6117, + "src": "2201:63:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5263, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2201:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333635", + "id": 5265, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2256:8:48", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_31536000_by_1", + "typeString": "int_const 31536000" + }, + "value": "365" + }, + "visibility": "public" + }, + { + "baseFunctions": [ + 273 + ], + "constant": true, + "functionSelector": "21609bbf", + "id": 5270, + "mutability": "constant", + "name": "RATE_REDUCTION_COEFFICIENT", + "nodeType": "VariableDeclaration", + "overrides": { + "id": 5268, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2294:8:48" + }, + "scope": 6117, + "src": "2270:81:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5267, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2270:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31313839323037313135303032373231303234", + "id": 5269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2332:19:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1189207115002721024_by_1", + "typeString": "int_const 1189207115002721024" + }, + "value": "1189207115002721024" + }, + "visibility": "public" + }, + { + "baseFunctions": [ + 278 + ], + "constant": true, + "functionSelector": "7efad8e0", + "id": 5274, + "mutability": "constant", + "name": "RATE_DENOMINATOR", + "nodeType": "VariableDeclaration", + "overrides": { + "id": 5272, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2402:8:48" + }, + "scope": 6117, + "src": "2378:56:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5271, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2378:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31653138", + "id": 5273, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2430:4:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "visibility": "public" + }, + { + "constant": false, + "id": 5276, + "mutability": "immutable", + "name": "_balancerToken", + "nodeType": "VariableDeclaration", + "scope": 6117, + "src": "2441:47:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + }, + "typeName": { + "id": 5275, + "name": "IBalancerToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 252, + "src": "2441:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 5282, + "name": "MiningParametersUpdated", + "nodeType": "EventDefinition", + "parameters": { + "id": 5281, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5278, + "indexed": false, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 5282, + "src": "2525:12:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5277, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2525:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5280, + "indexed": false, + "mutability": "mutable", + "name": "supply", + "nodeType": "VariableDeclaration", + "scope": 5282, + "src": "2539:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5279, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2539:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2524:30:48" + }, + "src": "2495:60:48" + }, + { + "constant": false, + "id": 5284, + "mutability": "mutable", + "name": "_miningEpoch", + "nodeType": "VariableDeclaration", + "scope": 6117, + "src": "2585:28:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2585:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 5291, + "mutability": "mutable", + "name": "_startEpochTime", + "nodeType": "VariableDeclaration", + "scope": 6117, + "src": "2619:51:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5285, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2619:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 5288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2658:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 5287, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2658:7:48", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 5286, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "2653:4:48", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 5289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2653:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 5290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "2653:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 5293, + "mutability": "mutable", + "name": "_startEpochSupply", + "nodeType": "VariableDeclaration", + "scope": 6117, + "src": "2727:33:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5292, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2727:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 5295, + "mutability": "mutable", + "name": "_rate", + "nodeType": "VariableDeclaration", + "scope": 6117, + "src": "2766:21:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5294, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2766:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 5309, + "nodeType": "Block", + "src": "2881:47:48", + "statements": [ + { + "expression": { + "id": 5307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5305, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "2891:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5306, + "name": "balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5299, + "src": "2908:13:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "src": "2891:30:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5308, + "nodeType": "ExpressionStatement", + "src": "2891:30:48" + } + ] + }, + "id": 5310, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 5302, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5297, + "src": "2874:5:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + } + ], + "id": 5303, + "modifierName": { + "id": 5301, + "name": "SingletonAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "2850:23:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SingletonAuthentication_$2572_$", + "typeString": "type(contract SingletonAuthentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2850:30:48" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5300, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5297, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 5310, + "src": "2806:12:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 5296, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "2806:6:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5299, + "mutability": "mutable", + "name": "balancerToken", + "nodeType": "VariableDeclaration", + "scope": 5310, + "src": "2820:28:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + }, + "typeName": { + "id": 5298, + "name": "IBalancerToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 252, + "src": "2820:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "visibility": "internal" + } + ], + "src": "2805:44:48" + }, + "returnParameters": { + "id": 5304, + "nodeType": "ParameterList", + "parameters": [], + "src": "2881:0:48" + }, + "scope": 6117, + "src": "2794:134:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 284 + ], + "body": { + "id": 5319, + "nodeType": "Block", + "src": "3066:38:48", + "statements": [ + { + "expression": { + "id": 5317, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "3083:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "functionReturnParameters": 5316, + "id": 5318, + "nodeType": "Return", + "src": "3076:21:48" + } + ] + }, + "documentation": { + "id": 5311, + "nodeType": "StructuredDocumentation", + "src": "2934:51:48", + "text": " @dev Returns the Balancer token." + }, + "functionSelector": "c0039699", + "id": 5320, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBalancerToken", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5313, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3032:8:48" + }, + "parameters": { + "id": 5312, + "nodeType": "ParameterList", + "parameters": [], + "src": "3015:2:48" + }, + "returnParameters": { + "id": 5316, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5315, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5320, + "src": "3050:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + }, + "typeName": { + "id": 5314, + "name": "IBalancerToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 252, + "src": "3050:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "visibility": "internal" + } + ], + "src": "3049:16:48" + }, + "scope": 6117, + "src": "2990:114:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 287 + ], + "body": { + "id": 5593, + "nodeType": "Block", + "src": "3355:4400:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5330, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "3373:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 5333, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3397:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 5332, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3397:7:48", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 5331, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "3392:4:48", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 5334, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3392:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 5335, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "3392:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3373:36:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416c726561647920616374697661746564", + "id": 5337, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3411:19:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cdcd4ef51fd197cf19d4213a99a19cd758a08ca51239ef37a021f665bc97841e", + "typeString": "literal_string \"Already activated\"" + }, + "value": "Already activated" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_cdcd4ef51fd197cf19d4213a99a19cd758a08ca51239ef37a021f665bc97841e", + "typeString": "literal_string \"Already activated\"" + } + ], + "id": 5329, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3365:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3365:66:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5339, + "nodeType": "ExpressionStatement", + "src": "3365:66:48" + }, + { + "assignments": [ + 5341 + ], + "declarations": [ + { + "constant": false, + "id": 5341, + "mutability": "mutable", + "name": "minterRole", + "nodeType": "VariableDeclaration", + "scope": 5593, + "src": "4023:18:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5340, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4023:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5345, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 5342, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4044:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MINTER_ROLE", + "nodeType": "MemberAccess", + "referencedDeclaration": 243, + "src": "4044:26:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", + "typeString": "function () view external returns (bytes32)" + } + }, + "id": 5344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4044:28:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4023:49:48" + }, + { + "assignments": [ + 5347 + ], + "declarations": [ + { + "constant": false, + "id": 5347, + "mutability": "mutable", + "name": "snapshotRole", + "nodeType": "VariableDeclaration", + "scope": 5593, + "src": "4082:20:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5346, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4082:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5351, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 5348, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4105:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SNAPSHOT_ROLE", + "nodeType": "MemberAccess", + "referencedDeclaration": 248, + "src": "4105:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", + "typeString": "function () view external returns (bytes32)" + } + }, + "id": 5350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4105:30:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4082:53:48" + }, + { + "assignments": [ + 5353 + ], + "declarations": [ + { + "constant": false, + "id": 5353, + "mutability": "mutable", + "name": "adminRole", + "nodeType": "VariableDeclaration", + "scope": 5593, + "src": "4145:17:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5352, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4145:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5357, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 5354, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4165:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "DEFAULT_ADMIN_ROLE", + "nodeType": "MemberAccess", + "referencedDeclaration": 238, + "src": "4165:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", + "typeString": "function () view external returns (bytes32)" + } + }, + "id": 5356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4165:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4145:55:48" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5361, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "4242:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 5364, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4261:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + ], + "id": 5363, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4253:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5362, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4253:7:48", + "typeDescriptions": {} + } + }, + "id": 5365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4253:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5359, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4219:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "hasRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 212, + "src": "4219:22:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view external returns (bool)" + } + }, + "id": 5366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4219:48:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "42616c616e636572546f6b656e41646d696e206973206e6f7420616e2061646d696e", + "id": 5367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4269:36:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_041402b6e20bb7a683dccf11746dc5b9eff1e50f094152dd5aa3796bf8e81f02", + "typeString": "literal_string \"BalancerTokenAdmin is not an admin\"" + }, + "value": "BalancerTokenAdmin is not an admin" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_041402b6e20bb7a683dccf11746dc5b9eff1e50f094152dd5aa3796bf8e81f02", + "typeString": "literal_string \"BalancerTokenAdmin is not an admin\"" + } + ], + "id": 5358, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4211:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4211:95:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5369, + "nodeType": "ExpressionStatement", + "src": "4211:95:48" + }, + { + "assignments": [ + 5371 + ], + "declarations": [ + { + "constant": false, + "id": 5371, + "mutability": "mutable", + "name": "numberOfMinters", + "nodeType": "VariableDeclaration", + "scope": 5593, + "src": "4418:23:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4418:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5376, + "initialValue": { + "arguments": [ + { + "id": 5374, + "name": "minterRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5341, + "src": "4478:10:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 5372, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4444:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMemberCount", + "nodeType": "MemberAccess", + "referencedDeclaration": 194, + "src": "4444:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view external returns (uint256)" + } + }, + "id": 5375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4444:45:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4418:71:48" + }, + { + "body": { + "id": 5402, + "nodeType": "Block", + "src": "4545:144:48", + "statements": [ + { + "assignments": [ + 5388 + ], + "declarations": [ + { + "constant": false, + "id": 5388, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 5402, + "src": "4559:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5387, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4559:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5394, + "initialValue": { + "arguments": [ + { + "id": 5391, + "name": "minterRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5341, + "src": "4605:10:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "hexValue": "30", + "id": 5392, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4617:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 5389, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4576:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5390, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMember", + "nodeType": "MemberAccess", + "referencedDeclaration": 203, + "src": "4576:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_address_$", + "typeString": "function (bytes32,uint256) view external returns (address)" + } + }, + "id": 5393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4576:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4559:60:48" + }, + { + "expression": { + "arguments": [ + { + "id": 5398, + "name": "minterRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5341, + "src": "4659:10:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5399, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5388, + "src": "4671:6:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5395, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4633:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "revokeRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 233, + "src": "4633:25:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address) external" + } + }, + "id": 5400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4633:45:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5401, + "nodeType": "ExpressionStatement", + "src": "4633:45:48" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5381, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5378, + "src": "4519:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5382, + "name": "numberOfMinters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5371, + "src": "4523:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4519:19:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5403, + "initializationExpression": { + "assignments": [ + 5378 + ], + "declarations": [ + { + "constant": false, + "id": 5378, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5403, + "src": "4504:9:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5377, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4504:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5380, + "initialValue": { + "hexValue": "30", + "id": 5379, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4516:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4504:13:48" + }, + "loopExpression": { + "expression": { + "id": 5385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "4540:3:48", + "subExpression": { + "id": 5384, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5378, + "src": "4542:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5386, + "nodeType": "ExpressionStatement", + "src": "4540:3:48" + }, + "nodeType": "ForStatement", + "src": "4499:190:48" + }, + { + "expression": { + "arguments": [ + { + "id": 5407, + "name": "minterRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5341, + "src": "4787:10:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 5410, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4807:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + ], + "id": 5409, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4799:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5408, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4799:7:48", + "typeDescriptions": {} + } + }, + "id": 5411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4799:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5404, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "4762:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "grantRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 226, + "src": "4762:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address) external" + } + }, + "id": 5412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4762:51:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5413, + "nodeType": "ExpressionStatement", + "src": "4762:51:48" + }, + { + "assignments": [ + 5415 + ], + "declarations": [ + { + "constant": false, + "id": 5415, + "mutability": "mutable", + "name": "numberOfSnapshotters", + "nodeType": "VariableDeclaration", + "scope": 5593, + "src": "5139:28:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5414, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5139:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5420, + "initialValue": { + "arguments": [ + { + "id": 5418, + "name": "snapshotRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5347, + "src": "5204:12:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 5416, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "5170:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMemberCount", + "nodeType": "MemberAccess", + "referencedDeclaration": 194, + "src": "5170:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view external returns (uint256)" + } + }, + "id": 5419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5170:47:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5139:78:48" + }, + { + "body": { + "id": 5446, + "nodeType": "Block", + "src": "5278:158:48", + "statements": [ + { + "assignments": [ + 5432 + ], + "declarations": [ + { + "constant": false, + "id": 5432, + "mutability": "mutable", + "name": "snapshotter", + "nodeType": "VariableDeclaration", + "scope": 5446, + "src": "5292:19:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5431, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5292:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5438, + "initialValue": { + "arguments": [ + { + "id": 5435, + "name": "snapshotRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5347, + "src": "5343:12:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "hexValue": "30", + "id": 5436, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5357:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 5433, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "5314:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMember", + "nodeType": "MemberAccess", + "referencedDeclaration": 203, + "src": "5314:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_address_$", + "typeString": "function (bytes32,uint256) view external returns (address)" + } + }, + "id": 5437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5314:45:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5292:67:48" + }, + { + "expression": { + "arguments": [ + { + "id": 5442, + "name": "snapshotRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5347, + "src": "5399:12:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5443, + "name": "snapshotter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5432, + "src": "5413:11:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5439, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "5373:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "revokeRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 233, + "src": "5373:25:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address) external" + } + }, + "id": 5444, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5373:52:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5445, + "nodeType": "ExpressionStatement", + "src": "5373:52:48" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5425, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5422, + "src": "5247:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5426, + "name": "numberOfSnapshotters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5415, + "src": "5251:20:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5247:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5447, + "initializationExpression": { + "assignments": [ + 5422 + ], + "declarations": [ + { + "constant": false, + "id": 5422, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5447, + "src": "5232:9:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5232:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5424, + "initialValue": { + "hexValue": "30", + "id": 5423, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5244:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "5232:13:48" + }, + "loopExpression": { + "expression": { + "id": 5429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "5273:3:48", + "subExpression": { + "id": 5428, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5422, + "src": "5275:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5430, + "nodeType": "ExpressionStatement", + "src": "5273:3:48" + }, + "nodeType": "ForStatement", + "src": "5227:209:48" + }, + { + "expression": { + "arguments": [ + { + "id": 5451, + "name": "snapshotRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5347, + "src": "5539:12:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 5454, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "5561:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + ], + "id": 5453, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5553:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5452, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5553:7:48", + "typeDescriptions": {} + } + }, + "id": 5455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5553:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5448, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "5514:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "grantRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 226, + "src": "5514:24:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address) external" + } + }, + "id": 5456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5514:53:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5457, + "nodeType": "ExpressionStatement", + "src": "5514:53:48" + }, + { + "assignments": [ + 5459 + ], + "declarations": [ + { + "constant": false, + "id": 5459, + "mutability": "mutable", + "name": "numberOfAdmins", + "nodeType": "VariableDeclaration", + "scope": 5593, + "src": "6016:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5458, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6016:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5464, + "initialValue": { + "arguments": [ + { + "id": 5462, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "6075:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 5460, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "6041:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMemberCount", + "nodeType": "MemberAccess", + "referencedDeclaration": 194, + "src": "6041:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view external returns (uint256)" + } + }, + "id": 5463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6041:44:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6016:69:48" + }, + { + "assignments": [ + 5466 + ], + "declarations": [ + { + "constant": false, + "id": 5466, + "mutability": "mutable", + "name": "skipSelf", + "nodeType": "VariableDeclaration", + "scope": 5593, + "src": "6095:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5465, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6095:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5468, + "initialValue": { + "hexValue": "30", + "id": 5467, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6114:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6095:20:48" + }, + { + "body": { + "id": 5507, + "nodeType": "Block", + "src": "6170:369:48", + "statements": [ + { + "assignments": [ + 5480 + ], + "declarations": [ + { + "constant": false, + "id": 5480, + "mutability": "mutable", + "name": "admin", + "nodeType": "VariableDeclaration", + "scope": 5507, + "src": "6184:13:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5479, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6184:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5486, + "initialValue": { + "arguments": [ + { + "id": 5483, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "6229:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5484, + "name": "skipSelf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5466, + "src": "6240:8:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5481, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "6200:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMember", + "nodeType": "MemberAccess", + "referencedDeclaration": 203, + "src": "6200:28:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_address_$", + "typeString": "function (bytes32,uint256) view external returns (address)" + } + }, + "id": 5485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6200:49:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6184:65:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5487, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5480, + "src": "6267:5:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "id": 5490, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "6284:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + ], + "id": 5489, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6276:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5488, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6276:7:48", + "typeDescriptions": {} + } + }, + "id": 5491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6276:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6267:22:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5505, + "nodeType": "Block", + "src": "6373:156:48", + "statements": [ + { + "expression": { + "id": 5503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5501, + "name": "skipSelf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5466, + "src": "6502:8:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "31", + "id": 5502, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6513:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "6502:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5504, + "nodeType": "ExpressionStatement", + "src": "6502:12:48" + } + ] + }, + "id": 5506, + "nodeType": "IfStatement", + "src": "6263:266:48", + "trueBody": { + "id": 5500, + "nodeType": "Block", + "src": "6291:76:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5496, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "6335:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5497, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5480, + "src": "6346:5:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5493, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "6309:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "revokeRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 233, + "src": "6309:25:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address) external" + } + }, + "id": 5498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6309:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5499, + "nodeType": "ExpressionStatement", + "src": "6309:43:48" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5473, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5470, + "src": "6145:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5474, + "name": "numberOfAdmins", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5459, + "src": "6149:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6145:18:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5508, + "initializationExpression": { + "assignments": [ + 5470 + ], + "declarations": [ + { + "constant": false, + "id": 5470, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5508, + "src": "6130:9:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5469, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6130:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5472, + "initialValue": { + "hexValue": "30", + "id": 5471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6142:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6130:13:48" + }, + "loopExpression": { + "expression": { + "id": 5477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "6165:3:48", + "subExpression": { + "id": 5476, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5470, + "src": "6167:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5478, + "nodeType": "ExpressionStatement", + "src": "6165:3:48" + }, + "nodeType": "ForStatement", + "src": "6125:414:48" + }, + { + "expression": { + "arguments": [ + { + "id": 5512, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "6804:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 5515, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "6823:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + ], + "id": 5514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6815:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5513, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6815:7:48", + "typeDescriptions": {} + } + }, + "id": 5516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6815:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5509, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "6778:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "revokeRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 233, + "src": "6778:25:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address) external" + } + }, + "id": 5517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6778:51:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5518, + "nodeType": "ExpressionStatement", + "src": "6778:51:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 5522, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5353, + "src": "6974:9:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 5520, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "6940:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMemberCount", + "nodeType": "MemberAccess", + "referencedDeclaration": 194, + "src": "6940:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view external returns (uint256)" + } + }, + "id": 5523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6940:44:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 5524, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6988:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6940:49:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416464726573732065786973747320776974682061646d696e20726967687473", + "id": 5526, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6991:34:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3f235a40b57f25d15d9b967b66dbf39d7f483b796f8666c9cefe2d5767373bf3", + "typeString": "literal_string \"Address exists with admin rights\"" + }, + "value": "Address exists with admin rights" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3f235a40b57f25d15d9b967b66dbf39d7f483b796f8666c9cefe2d5767373bf3", + "typeString": "literal_string \"Address exists with admin rights\"" + } + ], + "id": 5519, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6932:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6932:94:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5528, + "nodeType": "ExpressionStatement", + "src": "6932:94:48" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5532, + "name": "minterRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5341, + "src": "7067:10:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 5535, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7087:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + ], + "id": 5534, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7079:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5533, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7079:7:48", + "typeDescriptions": {} + } + }, + "id": 5536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7079:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5530, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "7044:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "hasRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 212, + "src": "7044:22:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view external returns (bool)" + } + }, + "id": 5537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7044:49:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "42616c616e636572546f6b656e41646d696e206973206e6f742061206d696e746572", + "id": 5538, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7095:36:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9cf72961a7d9bee3709a9fa53a9b06bccc18a6f1c53b96e6e89146419627528a", + "typeString": "literal_string \"BalancerTokenAdmin is not a minter\"" + }, + "value": "BalancerTokenAdmin is not a minter" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9cf72961a7d9bee3709a9fa53a9b06bccc18a6f1c53b96e6e89146419627528a", + "typeString": "literal_string \"BalancerTokenAdmin is not a minter\"" + } + ], + "id": 5529, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7036:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7036:96:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5540, + "nodeType": "ExpressionStatement", + "src": "7036:96:48" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5544, + "name": "snapshotRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5347, + "src": "7173:12:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 5547, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7195:4:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BalancerTokenAdmin_$6117", + "typeString": "contract BalancerTokenAdmin" + } + ], + "id": 5546, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7187:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5545, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7187:7:48", + "typeDescriptions": {} + } + }, + "id": 5548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7187:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 5542, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "7150:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "hasRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 212, + "src": "7150:22:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view external returns (bool)" + } + }, + "id": 5549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7150:51:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "42616c616e636572546f6b656e41646d696e206973206e6f74206120736e617073686f74746572", + "id": 5550, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7203:41:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1c5048828a24fe125ddad0473d0150f23a136ec6842d506ae40ba096068a181d", + "typeString": "literal_string \"BalancerTokenAdmin is not a snapshotter\"" + }, + "value": "BalancerTokenAdmin is not a snapshotter" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1c5048828a24fe125ddad0473d0150f23a136ec6842d506ae40ba096068a181d", + "typeString": "literal_string \"BalancerTokenAdmin is not a snapshotter\"" + } + ], + "id": 5541, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7142:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7142:103:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5552, + "nodeType": "ExpressionStatement", + "src": "7142:103:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 5556, + "name": "minterRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5341, + "src": "7297:10:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 5554, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "7263:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMemberCount", + "nodeType": "MemberAccess", + "referencedDeclaration": 194, + "src": "7263:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view external returns (uint256)" + } + }, + "id": 5557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7263:45:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 5558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7312:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "7263:50:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d756c7469706c65206d696e74657273206578697374", + "id": 5560, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7315:24:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a034aa147e9776621b2f4b902be55588ee2551c86a9932e53aec923bf6380041", + "typeString": "literal_string \"Multiple minters exist\"" + }, + "value": "Multiple minters exist" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a034aa147e9776621b2f4b902be55588ee2551c86a9932e53aec923bf6380041", + "typeString": "literal_string \"Multiple minters exist\"" + } + ], + "id": 5553, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7255:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7255:85:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5562, + "nodeType": "ExpressionStatement", + "src": "7255:85:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 5566, + "name": "snapshotRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5347, + "src": "7392:12:48", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 5564, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "7358:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5565, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRoleMemberCount", + "nodeType": "MemberAccess", + "referencedDeclaration": 194, + "src": "7358:33:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view external returns (uint256)" + } + }, + "id": 5567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7358:47:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 5568, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7409:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "7358:52:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d756c7469706c6520736e617073686f7474657273206578697374", + "id": 5570, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7412:29:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_13501c8caa6bdd6d160e083562c1edc001ea5b234fcb0f1a3fb97b6e55c1ee2a", + "typeString": "literal_string \"Multiple snapshotters exist\"" + }, + "value": "Multiple snapshotters exist" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_13501c8caa6bdd6d160e083562c1edc001ea5b234fcb0f1a3fb97b6e55c1ee2a", + "typeString": "literal_string \"Multiple snapshotters exist\"" + } + ], + "id": 5563, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7350:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7350:92:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5572, + "nodeType": "ExpressionStatement", + "src": "7350:92:48" + }, + { + "expression": { + "id": 5577, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5573, + "name": "_startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5293, + "src": "7556:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 5574, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "7576:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "totalSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 1581, + "src": "7576:26:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 5576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7576:28:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7556:48:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5578, + "nodeType": "ExpressionStatement", + "src": "7556:48:48" + }, + { + "expression": { + "id": 5582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5579, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "7614:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 5580, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "7632:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "7632:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7614:33:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5583, + "nodeType": "ExpressionStatement", + "src": "7614:33:48" + }, + { + "expression": { + "id": 5586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5584, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5295, + "src": "7657:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5585, + "name": "INITIAL_RATE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5262, + "src": "7665:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7657:20:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5587, + "nodeType": "ExpressionStatement", + "src": "7657:20:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 5589, + "name": "INITIAL_RATE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5262, + "src": "7716:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 5590, + "name": "_startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5293, + "src": "7730:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5588, + "name": "MiningParametersUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5282, + "src": "7692:23:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 5591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7692:56:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5592, + "nodeType": "EmitStatement", + "src": "7687:61:48" + } + ] + }, + "documentation": { + "id": 5321, + "nodeType": "StructuredDocumentation", + "src": "3110:176:48", + "text": " @notice Initiate BAL token inflation schedule\n @dev Reverts if contract does not have sole minting powers over BAL (and no other minters can be added)." + }, + "functionSelector": "0f15f4c0", + "id": 5594, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5325, + "modifierName": { + "id": 5324, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "3329:12:48", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3329:12:48" + }, + { + "id": 5327, + "modifierName": { + "id": 5326, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "3342:12:48", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3342:12:48" + } + ], + "name": "activate", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5323, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3320:8:48" + }, + "parameters": { + "id": 5322, + "nodeType": "ParameterList", + "parameters": [], + "src": "3308:2:48" + }, + "returnParameters": { + "id": 5328, + "nodeType": "ParameterList", + "parameters": [], + "src": "3355:0:48" + }, + "scope": 6117, + "src": "3291:4464:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 304 + ], + "body": { + "id": 5637, + "nodeType": "Block", + "src": "8006:456:48", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5605, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "8138:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "8138:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [ + { + "id": 5609, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "8177:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5607, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "8157:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "8157:19:48", + "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": 5610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8157:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8138:59:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5616, + "nodeType": "IfStatement", + "src": "8134:115:48", + "trueBody": { + "id": 5615, + "nodeType": "Block", + "src": "8199:50:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5612, + "name": "_updateMiningParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5873, + "src": "8213:23:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 5613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8213:25:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5614, + "nodeType": "ExpressionStatement", + "src": "8213:25:48" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5626, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 5622, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5599, + "src": "8313:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 5618, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "8280:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "totalSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 1581, + "src": "8280:26:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 5620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8280:28:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "8280:32:48", + "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": 5623, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8280:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5624, + "name": "_availableSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5791, + "src": "8324:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 5625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8324:18:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8280:62:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d696e7420616d6f756e7420657863656564732072656d61696e696e6720617661696c61626c6520737570706c79", + "id": 5627, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8356:48:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6eb66c64386679ae0ee88bc9cc3bd4fecbeb1a16cc70f65f78e8c0472437ba6d", + "typeString": "literal_string \"Mint amount exceeds remaining available supply\"" + }, + "value": "Mint amount exceeds remaining available supply" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6eb66c64386679ae0ee88bc9cc3bd4fecbeb1a16cc70f65f78e8c0472437ba6d", + "typeString": "literal_string \"Mint amount exceeds remaining available supply\"" + } + ], + "id": 5617, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "8259:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8259:155:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5629, + "nodeType": "ExpressionStatement", + "src": "8259:155:48" + }, + { + "expression": { + "arguments": [ + { + "id": 5633, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5597, + "src": "8444:2:48", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5634, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5599, + "src": "8448:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5630, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "8424:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mint", + "nodeType": "MemberAccess", + "referencedDeclaration": 187, + "src": "8424:19:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256) external" + } + }, + "id": 5635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8424:31:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5636, + "nodeType": "ExpressionStatement", + "src": "8424:31:48" + } + ] + }, + "documentation": { + "id": 5595, + "nodeType": "StructuredDocumentation", + "src": "7761:167:48", + "text": " @notice Mint BAL tokens subject to the defined inflation schedule\n @dev Callable only by addresses defined in the Balancer Authorizer contract" + }, + "functionSelector": "40c10f19", + "id": 5638, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5603, + "modifierName": { + "id": 5602, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "7993:12:48", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7993:12:48" + } + ], + "name": "mint", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5601, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7984:8:48" + }, + "parameters": { + "id": 5600, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5597, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 5638, + "src": "7947:10:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5596, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7947:7:48", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5599, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 5638, + "src": "7959:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5598, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7959:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7946:28:48" + }, + "returnParameters": { + "id": 5604, + "nodeType": "ParameterList", + "parameters": [], + "src": "8006:0:48" + }, + "scope": 6117, + "src": "7933:529:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5649, + "nodeType": "Block", + "src": "8665:42:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 5644, + "name": "_balancerToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5276, + "src": "8675:14:48", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "id": 5646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "snapshot", + "nodeType": "MemberAccess", + "referencedDeclaration": 251, + "src": "8675:23:48", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", + "typeString": "function () external" + } + }, + "id": 5647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8675:25:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5648, + "nodeType": "ExpressionStatement", + "src": "8675:25:48" + } + ] + }, + "documentation": { + "id": 5639, + "nodeType": "StructuredDocumentation", + "src": "8468:150:48", + "text": " @notice Perform a snapshot of BAL token balances\n @dev Callable only by addresses defined in the Balancer Authorizer contract" + }, + "functionSelector": "9711715a", + "id": 5650, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 5642, + "modifierName": { + "id": 5641, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "8652:12:48", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8652:12:48" + } + ], + "name": "snapshot", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5640, + "nodeType": "ParameterList", + "parameters": [], + "src": "8640:2:48" + }, + "returnParameters": { + "id": 5643, + "nodeType": "ParameterList", + "parameters": [], + "src": "8665:0:48" + }, + "scope": 6117, + "src": "8623:84:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5658, + "nodeType": "Block", + "src": "8836:36:48", + "statements": [ + { + "expression": { + "id": 5656, + "name": "_miningEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5284, + "src": "8853:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5655, + "id": 5657, + "nodeType": "Return", + "src": "8846:19:48" + } + ] + }, + "documentation": { + "id": 5651, + "nodeType": "StructuredDocumentation", + "src": "8713:60:48", + "text": " @notice Returns the current epoch number." + }, + "functionSelector": "087905c9", + "id": 5659, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getMiningEpoch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5652, + "nodeType": "ParameterList", + "parameters": [], + "src": "8801:2:48" + }, + "returnParameters": { + "id": 5655, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5654, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5659, + "src": "8827:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5653, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8827:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8826:9:48" + }, + "scope": 6117, + "src": "8778:94:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5667, + "nodeType": "Block", + "src": "9020:39:48", + "statements": [ + { + "expression": { + "id": 5665, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "9037:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5664, + "id": 5666, + "nodeType": "Return", + "src": "9030:22:48" + } + ] + }, + "documentation": { + "id": 5660, + "nodeType": "StructuredDocumentation", + "src": "8878:76:48", + "text": " @notice Returns the start timestamp of the current epoch." + }, + "functionSelector": "4d2fa413", + "id": 5668, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getStartEpochTime", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5661, + "nodeType": "ParameterList", + "parameters": [], + "src": "8985:2:48" + }, + "returnParameters": { + "id": 5664, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5663, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5668, + "src": "9011:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9011:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9010:9:48" + }, + "scope": 6117, + "src": "8959:100:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5679, + "nodeType": "Block", + "src": "9205:64:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5676, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "9242:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5674, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "9222:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "9222:19:48", + "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": 5677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9222:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5673, + "id": 5678, + "nodeType": "Return", + "src": "9215:47:48" + } + ] + }, + "documentation": { + "id": 5669, + "nodeType": "StructuredDocumentation", + "src": "9065:73:48", + "text": " @notice Returns the start timestamp of the next epoch." + }, + "functionSelector": "0dfbdce4", + "id": 5680, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getFutureEpochTime", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5670, + "nodeType": "ParameterList", + "parameters": [], + "src": "9170:2:48" + }, + "returnParameters": { + "id": 5673, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5672, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5680, + "src": "9196:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5671, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9196:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9195:9:48" + }, + "scope": 6117, + "src": "9143:126:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5688, + "nodeType": "Block", + "src": "9437:41:48", + "statements": [ + { + "expression": { + "id": 5686, + "name": "_startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5293, + "src": "9454:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5685, + "id": 5687, + "nodeType": "Return", + "src": "9447:24:48" + } + ] + }, + "documentation": { + "id": 5681, + "nodeType": "StructuredDocumentation", + "src": "9275:94:48", + "text": " @notice Returns the available supply at the beginning of the current epoch." + }, + "functionSelector": "55f74176", + "id": 5689, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getStartEpochSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5682, + "nodeType": "ParameterList", + "parameters": [], + "src": "9402:2:48" + }, + "returnParameters": { + "id": 5685, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5684, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5689, + "src": "9428:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5683, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9428:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9427:9:48" + }, + "scope": 6117, + "src": "9374:104:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5697, + "nodeType": "Block", + "src": "9628:29:48", + "statements": [ + { + "expression": { + "id": 5695, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5295, + "src": "9645:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5694, + "id": 5696, + "nodeType": "Return", + "src": "9638:12:48" + } + ] + }, + "documentation": { + "id": 5690, + "nodeType": "StructuredDocumentation", + "src": "9484:79:48", + "text": " @notice Returns the current inflation rate of BAL per second" + }, + "functionSelector": "819df2c4", + "id": 5698, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getInflationRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5691, + "nodeType": "ParameterList", + "parameters": [], + "src": "9593:2:48" + }, + "returnParameters": { + "id": 5694, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5693, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5698, + "src": "9619:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5692, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9619:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9618:9:48" + }, + "scope": 6117, + "src": "9568:89:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5707, + "nodeType": "Block", + "src": "9827:42:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5704, + "name": "_availableSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5791, + "src": "9844:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 5705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9844:18:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5703, + "id": 5706, + "nodeType": "Return", + "src": "9837:25:48" + } + ] + }, + "documentation": { + "id": 5699, + "nodeType": "StructuredDocumentation", + "src": "9663:97:48", + "text": " @notice Maximum allowable number of tokens in existence (claimed or unclaimed)" + }, + "functionSelector": "c167d1cd", + "id": 5708, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAvailableSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5700, + "nodeType": "ParameterList", + "parameters": [], + "src": "9792:2:48" + }, + "returnParameters": { + "id": 5703, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5702, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5708, + "src": "9818:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5701, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9818:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9817:9:48" + }, + "scope": 6117, + "src": "9765:104:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 297 + ], + "body": { + "id": 5718, + "nodeType": "Block", + "src": "10115:46:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5715, + "name": "_startEpochTimeWrite", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5818, + "src": "10132:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$", + "typeString": "function () returns (uint256)" + } + }, + "id": 5716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10132:22:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5714, + "id": 5717, + "nodeType": "Return", + "src": "10125:29:48" + } + ] + }, + "documentation": { + "id": 5709, + "nodeType": "StructuredDocumentation", + "src": "9875:168:48", + "text": " @notice Get timestamp of the current mining epoch start while simultaneously updating mining parameters\n @return Timestamp of the current epoch" + }, + "functionSelector": "a228bced", + "id": 5719, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "startEpochTimeWrite", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5711, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10088:8:48" + }, + "parameters": { + "id": 5710, + "nodeType": "ParameterList", + "parameters": [], + "src": "10076:2:48" + }, + "returnParameters": { + "id": 5714, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5713, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5719, + "src": "10106:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5712, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10106:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10105:9:48" + }, + "scope": 6117, + "src": "10048:113:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5731, + "nodeType": "Block", + "src": "10393:71:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5728, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "10437:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5725, + "name": "_startEpochTimeWrite", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5818, + "src": "10410:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$", + "typeString": "function () returns (uint256)" + } + }, + "id": 5726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10410:22:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "10410:26:48", + "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": 5729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10410:47:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5724, + "id": 5730, + "nodeType": "Return", + "src": "10403:54:48" + } + ] + }, + "documentation": { + "id": 5720, + "nodeType": "StructuredDocumentation", + "src": "10167:162:48", + "text": " @notice Get timestamp of the next mining epoch start while simultaneously updating mining parameters\n @return Timestamp of the next epoch" + }, + "functionSelector": "277dbafb", + "id": 5732, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "futureEpochTimeWrite", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5721, + "nodeType": "ParameterList", + "parameters": [], + "src": "10363:2:48" + }, + "returnParameters": { + "id": 5724, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5723, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5732, + "src": "10384:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5722, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10384:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10383:9:48" + }, + "scope": 6117, + "src": "10334:130:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5750, + "nodeType": "Block", + "src": "10737:150:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5737, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "10755:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "10755:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [ + { + "id": 5741, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "10794:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5739, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "10774:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "10774:19:48", + "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": 5742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10774:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10755:59:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "45706f636820686173206e6f742066696e697368656420796574", + "id": 5744, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10816:28:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_844f8669d9677550455a55a9e49a7c619dce5f058c358110abeab9cb013df878", + "typeString": "literal_string \"Epoch has not finished yet\"" + }, + "value": "Epoch has not finished yet" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_844f8669d9677550455a55a9e49a7c619dce5f058c358110abeab9cb013df878", + "typeString": "literal_string \"Epoch has not finished yet\"" + } + ], + "id": 5736, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "10747:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5745, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10747:98:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5746, + "nodeType": "ExpressionStatement", + "src": "10747:98:48" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5747, + "name": "_updateMiningParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5873, + "src": "10855:23:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 5748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10855:25:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5749, + "nodeType": "ExpressionStatement", + "src": "10855:25:48" + } + ] + }, + "documentation": { + "id": 5733, + "nodeType": "StructuredDocumentation", + "src": "10470:219:48", + "text": " @notice Update mining rate and supply at the start of the epoch\n @dev Callable by any address, but only once per epoch\n Total supply becomes slightly larger if this function is called late" + }, + "functionSelector": "cb626ae2", + "id": 5751, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateMiningParameters", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5734, + "nodeType": "ParameterList", + "parameters": [], + "src": "10725:2:48" + }, + "returnParameters": { + "id": 5735, + "nodeType": "ParameterList", + "parameters": [], + "src": "10737:0:48" + }, + "scope": 6117, + "src": "10694:193:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5766, + "nodeType": "Block", + "src": "11250:56:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5762, + "name": "start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5754, + "src": "11288:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 5763, + "name": "end", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5756, + "src": "11295:3:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5761, + "name": "_mintableInTimeframe", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6040, + "src": "11267:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) view returns (uint256)" + } + }, + "id": 5764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11267:32:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5760, + "id": 5765, + "nodeType": "Return", + "src": "11260:39:48" + } + ] + }, + "documentation": { + "id": 5752, + "nodeType": "StructuredDocumentation", + "src": "10893:263:48", + "text": " @notice How much supply is mintable from start timestamp till end timestamp\n @param start Start of the time interval (timestamp)\n @param end End of the time interval (timestamp)\n @return Tokens mintable from `start` till `end`" + }, + "functionSelector": "c3b03fa8", + "id": 5767, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mintableInTimeframe", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5757, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5754, + "mutability": "mutable", + "name": "start", + "nodeType": "VariableDeclaration", + "scope": 5767, + "src": "11190:13:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11190:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5756, + "mutability": "mutable", + "name": "end", + "nodeType": "VariableDeclaration", + "scope": 5767, + "src": "11205:11:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5755, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11205:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11189:28:48" + }, + "returnParameters": { + "id": 5760, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5759, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5767, + "src": "11241:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5758, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11241:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11240:9:48" + }, + "scope": 6117, + "src": "11161:145:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5790, + "nodeType": "Block", + "src": "11501:167:48", + "statements": [ + { + "assignments": [ + 5774 + ], + "declarations": [ + { + "constant": false, + "id": 5774, + "mutability": "mutable", + "name": "newSupplyFromCurrentEpoch", + "nodeType": "VariableDeclaration", + "scope": 5790, + "src": "11511:33:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5773, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11511:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5784, + "initialValue": { + "arguments": [ + { + "id": 5782, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5295, + "src": "11590:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "components": [ + { + "arguments": [ + { + "id": 5778, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "11568:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "expression": { + "id": 5775, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "11548:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "11548:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2694, + "src": "11548:19:48", + "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": 5779, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11548:36:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 5780, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11547:38:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 2803, + "src": "11547:42:48", + "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": 5783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11547:49:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11511:85:48" + }, + { + "expression": { + "arguments": [ + { + "id": 5787, + "name": "newSupplyFromCurrentEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5774, + "src": "11635:25:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5785, + "name": "_startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5293, + "src": "11613:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5786, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "11613:21:48", + "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": 5788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11613:48:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5772, + "id": 5789, + "nodeType": "Return", + "src": "11606:55:48" + } + ] + }, + "documentation": { + "id": 5768, + "nodeType": "StructuredDocumentation", + "src": "11339:97:48", + "text": " @notice Maximum allowable number of tokens in existence (claimed or unclaimed)" + }, + "id": 5791, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_availableSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5769, + "nodeType": "ParameterList", + "parameters": [], + "src": "11466:2:48" + }, + "returnParameters": { + "id": 5772, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5771, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5791, + "src": "11492:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5770, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11492:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11491:9:48" + }, + "scope": 6117, + "src": "11441:227:48", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5817, + "nodeType": "Block", + "src": "11906:247:48", + "statements": [ + { + "assignments": [ + 5798 + ], + "declarations": [ + { + "constant": false, + "id": 5798, + "mutability": "mutable", + "name": "startEpochTime", + "nodeType": "VariableDeclaration", + "scope": 5817, + "src": "11916:22:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5797, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11916:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5800, + "initialValue": { + "id": 5799, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "11941:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11916:40:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5801, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "11970:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "11970:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [ + { + "id": 5805, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "12008:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5803, + "name": "startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5798, + "src": "11989:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "11989:18:48", + "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": 5806, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11989:39:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11970:58:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5814, + "nodeType": "IfStatement", + "src": "11966:150:48", + "trueBody": { + "id": 5813, + "nodeType": "Block", + "src": "12030:86:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5808, + "name": "_updateMiningParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5873, + "src": "12044:23:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 5809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12044:25:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5810, + "nodeType": "ExpressionStatement", + "src": "12044:25:48" + }, + { + "expression": { + "id": 5811, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "12090:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5796, + "id": 5812, + "nodeType": "Return", + "src": "12083:22:48" + } + ] + } + }, + { + "expression": { + "id": 5815, + "name": "startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5798, + "src": "12132:14:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5796, + "id": 5816, + "nodeType": "Return", + "src": "12125:21:48" + } + ] + }, + "documentation": { + "id": 5792, + "nodeType": "StructuredDocumentation", + "src": "11674:168:48", + "text": " @notice Get timestamp of the current mining epoch start while simultaneously updating mining parameters\n @return Timestamp of the current epoch" + }, + "id": 5818, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_startEpochTimeWrite", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5793, + "nodeType": "ParameterList", + "parameters": [], + "src": "11876:2:48" + }, + "returnParameters": { + "id": 5796, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5795, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5818, + "src": "11897:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5794, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11897:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11896:9:48" + }, + "scope": 6117, + "src": "11847:306:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5872, + "nodeType": "Block", + "src": "12203:503:48", + "statements": [ + { + "assignments": [ + 5822 + ], + "declarations": [ + { + "constant": false, + "id": 5822, + "mutability": "mutable", + "name": "inflationRate", + "nodeType": "VariableDeclaration", + "scope": 5872, + "src": "12213:21:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5821, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12213:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5824, + "initialValue": { + "id": 5823, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5295, + "src": "12237:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12213:29:48" + }, + { + "assignments": [ + 5826 + ], + "declarations": [ + { + "constant": false, + "id": 5826, + "mutability": "mutable", + "name": "startEpochSupply", + "nodeType": "VariableDeclaration", + "scope": 5872, + "src": "12252:24:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5825, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12252:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5834, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 5831, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "12319:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5829, + "name": "inflationRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5822, + "src": "12301:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 2803, + "src": "12301:17:48", + "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": 5832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12301:38:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5827, + "name": "_startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5293, + "src": "12279:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "12279:21:48", + "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": 5833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12279:61:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12252:88:48" + }, + { + "expression": { + "id": 5843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5835, + "name": "inflationRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5822, + "src": "12350:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 5841, + "name": "RATE_REDUCTION_COEFFICIENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5270, + "src": "12410:26:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 5838, + "name": "RATE_DENOMINATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5274, + "src": "12384:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5836, + "name": "inflationRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5822, + "src": "12366:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 2803, + "src": "12366:17:48", + "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": 5839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12366:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5840, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 2848, + "src": "12366:43:48", + "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": 5842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12366:71:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12350:87:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5844, + "nodeType": "ExpressionStatement", + "src": "12350:87:48" + }, + { + "expression": { + "id": 5850, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5845, + "name": "_miningEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5284, + "src": "12448:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "31", + "id": 5848, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12480:1:48", + "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": 5846, + "name": "_miningEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5284, + "src": "12463:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "12463:16:48", + "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": 5849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12463:19:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12448:34:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5851, + "nodeType": "ExpressionStatement", + "src": "12448:34:48" + }, + { + "expression": { + "id": 5857, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5852, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "12492:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 5855, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "12530:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5853, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "12510:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "12510:19:48", + "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": 5856, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12510:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12492:58:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5858, + "nodeType": "ExpressionStatement", + "src": "12492:58:48" + }, + { + "expression": { + "id": 5861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5859, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5295, + "src": "12560:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5860, + "name": "inflationRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5822, + "src": "12568:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12560:21:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5862, + "nodeType": "ExpressionStatement", + "src": "12560:21:48" + }, + { + "expression": { + "id": 5865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5863, + "name": "_startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5293, + "src": "12591:17:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5864, + "name": "startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5826, + "src": "12611:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12591:36:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5866, + "nodeType": "ExpressionStatement", + "src": "12591:36:48" + }, + { + "eventCall": { + "arguments": [ + { + "id": 5868, + "name": "inflationRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5822, + "src": "12667:13:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 5869, + "name": "startEpochSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5826, + "src": "12682:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5867, + "name": "MiningParametersUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5282, + "src": "12643:23:48", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 5870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12643:56:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5871, + "nodeType": "EmitStatement", + "src": "12638:61:48" + } + ] + }, + "id": 5873, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateMiningParameters", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5819, + "nodeType": "ParameterList", + "parameters": [], + "src": "12191:2:48" + }, + "returnParameters": { + "id": 5820, + "nodeType": "ParameterList", + "parameters": [], + "src": "12203:0:48" + }, + "scope": 6117, + "src": "12159:547:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6039, + "nodeType": "Block", + "src": "13070:1859:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5884, + "name": "start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5876, + "src": "13088:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 5885, + "name": "end", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5878, + "src": "13097:3:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13088:12:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "7374617274203e20656e64", + "id": 5887, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13102:13:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_145e9e17082b02be25129749b7eb1462bd7e8d2ab4c8a5c3e371c8ac1d5ebece", + "typeString": "literal_string \"start > end\"" + }, + "value": "start > end" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_145e9e17082b02be25129749b7eb1462bd7e8d2ab4c8a5c3e371c8ac1d5ebece", + "typeString": "literal_string \"start > end\"" + } + ], + "id": 5883, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "13080:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13080:36:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5889, + "nodeType": "ExpressionStatement", + "src": "13080:36:48" + }, + { + "assignments": [ + 5891 + ], + "declarations": [ + { + "constant": false, + "id": 5891, + "mutability": "mutable", + "name": "currentEpochTime", + "nodeType": "VariableDeclaration", + "scope": 6039, + "src": "13127:24:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5890, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13127:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5893, + "initialValue": { + "id": 5892, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "13154:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13127:42:48" + }, + { + "assignments": [ + 5895 + ], + "declarations": [ + { + "constant": false, + "id": 5895, + "mutability": "mutable", + "name": "currentRate", + "nodeType": "VariableDeclaration", + "scope": 6039, + "src": "13179:19:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5894, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13179:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5897, + "initialValue": { + "id": 5896, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5295, + "src": "13201:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13179:27:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5898, + "name": "end", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5878, + "src": "13387:3:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [ + { + "id": 5901, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "13414:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5899, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "13393:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5900, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "13393:20:48", + "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": 5902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13393:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13387:47:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5922, + "nodeType": "IfStatement", + "src": "13383:235:48", + "trueBody": { + "id": 5921, + "nodeType": "Block", + "src": "13436:182:48", + "statements": [ + { + "expression": { + "id": 5909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5904, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "13450:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 5907, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "13490:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5905, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "13469:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5906, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "13469:20:48", + "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": 5908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13469:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13450:60:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5910, + "nodeType": "ExpressionStatement", + "src": "13450:60:48" + }, + { + "expression": { + "id": 5919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5911, + "name": "currentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "13524:11:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 5917, + "name": "RATE_REDUCTION_COEFFICIENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5270, + "src": "13580:26:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 5914, + "name": "RATE_DENOMINATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5274, + "src": "13554:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5912, + "name": "currentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "13538:11:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5913, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 2803, + "src": "13538:15:48", + "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": 5915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13538:33:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5916, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 2848, + "src": "13538:41:48", + "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": 5918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13538:69:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13524:83:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5920, + "nodeType": "ExpressionStatement", + "src": "13524:83:48" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5929, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5924, + "name": "end", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5878, + "src": "13636:3:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "arguments": [ + { + "id": 5927, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "13664:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5925, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "13643:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "13643:20:48", + "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": 5928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13643:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13636:48:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "746f6f2066617220696e20667574757265", + "id": 5930, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13686:19:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0e2e944db403ece7bc686f46309fd621c067b0b782b5eabb2e86ddafce8e984b", + "typeString": "literal_string \"too far in future\"" + }, + "value": "too far in future" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0e2e944db403ece7bc686f46309fd621c067b0b782b5eabb2e86ddafce8e984b", + "typeString": "literal_string \"too far in future\"" + } + ], + "id": 5923, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "13628:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 5931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13628:78:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5932, + "nodeType": "ExpressionStatement", + "src": "13628:78:48" + }, + { + "assignments": [ + 5934 + ], + "declarations": [ + { + "constant": false, + "id": 5934, + "mutability": "mutable", + "name": "toMint", + "nodeType": "VariableDeclaration", + "scope": 6039, + "src": "13717:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5933, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13717:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5936, + "initialValue": { + "hexValue": "30", + "id": 5935, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13734:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13717:18:48" + }, + { + "body": { + "id": 6035, + "nodeType": "Block", + "src": "13791:1108:48", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5947, + "name": "end", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5878, + "src": "13809:3:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 5948, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "13816:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13809:23:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6011, + "nodeType": "IfStatement", + "src": "13805:789:48", + "trueBody": { + "id": 6010, + "nodeType": "Block", + "src": "13834:760:48", + "statements": [ + { + "assignments": [ + 5951 + ], + "declarations": [ + { + "constant": false, + "id": 5951, + "mutability": "mutable", + "name": "currentEnd", + "nodeType": "VariableDeclaration", + "scope": 6010, + "src": "13852:18:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5950, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13852:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5953, + "initialValue": { + "id": 5952, + "name": "end", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5878, + "src": "13873:3:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13852:24:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5959, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5954, + "name": "currentEnd", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5951, + "src": "13898:10:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [ + { + "id": 5957, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "13932:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5955, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "13911:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "13911:20:48", + "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": 5958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13911:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13898:54:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5968, + "nodeType": "IfStatement", + "src": "13894:155:48", + "trueBody": { + "id": 5967, + "nodeType": "Block", + "src": "13954:95:48", + "statements": [ + { + "expression": { + "id": 5965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5960, + "name": "currentEnd", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5951, + "src": "13976:10:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 5963, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "14010:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5961, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "13989:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "13989:20:48", + "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": 5964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13989:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13976:54:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5966, + "nodeType": "ExpressionStatement", + "src": "13976:54:48" + } + ] + } + }, + { + "assignments": [ + 5970 + ], + "declarations": [ + { + "constant": false, + "id": 5970, + "mutability": "mutable", + "name": "currentStart", + "nodeType": "VariableDeclaration", + "scope": 6010, + "src": "14067:20:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5969, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14067:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5972, + "initialValue": { + "id": 5971, + "name": "start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5876, + "src": "14090:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14067:28:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5973, + "name": "currentStart", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5970, + "src": "14117:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [ + { + "id": 5976, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "14154:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5974, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "14133:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5975, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "14133:20:48", + "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": 5977, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14133:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14117:57:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5981, + "name": "currentStart", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5970, + "src": "14295:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5982, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "14310:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14295:31:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5989, + "nodeType": "IfStatement", + "src": "14291:109:48", + "trueBody": { + "id": 5988, + "nodeType": "Block", + "src": "14328:72:48", + "statements": [ + { + "expression": { + "id": 5986, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5984, + "name": "currentStart", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5970, + "src": "14350:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5985, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "14365:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14350:31:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5987, + "nodeType": "ExpressionStatement", + "src": "14350:31:48" + } + ] + } + }, + "id": 5990, + "nodeType": "IfStatement", + "src": "14113:287:48", + "trueBody": { + "id": 5980, + "nodeType": "Block", + "src": "14176:109:48", + "statements": [ + { + "id": 5979, + "nodeType": "Break", + "src": "14261:5:48" + } + ] + } + }, + { + "expression": { + "id": 6002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5991, + "name": "toMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5934, + "src": "14418:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 5998, + "name": "currentStart", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5970, + "src": "14469:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5996, + "name": "currentEnd", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5951, + "src": "14454:10:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2694, + "src": "14454:14:48", + "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": 5999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14454:28:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5994, + "name": "currentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "14438:11:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 2803, + "src": "14438:15:48", + "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": 6000, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14438:45:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 5992, + "name": "toMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5934, + "src": "14427:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "14427:10:48", + "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": 6001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14427:57:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14418:66:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6003, + "nodeType": "ExpressionStatement", + "src": "14418:66:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6006, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6004, + "name": "start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5876, + "src": "14507:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 6005, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "14516:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14507:25:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6009, + "nodeType": "IfStatement", + "src": "14503:77:48", + "trueBody": { + "id": 6008, + "nodeType": "Block", + "src": "14534:46:48", + "statements": [ + { + "id": 6007, + "nodeType": "Break", + "src": "14556:5:48" + } + ] + } + } + ] + } + }, + { + "expression": { + "id": 6017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6012, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "14608:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 6015, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "14648:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6013, + "name": "currentEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5891, + "src": "14627:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2694, + "src": "14627:20:48", + "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": 6016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14627:41:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14608:60:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6018, + "nodeType": "ExpressionStatement", + "src": "14608:60:48" + }, + { + "expression": { + "id": 6027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6019, + "name": "currentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "14756:11:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 6025, + "name": "RATE_DENOMINATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5274, + "src": "14822:16:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 6022, + "name": "RATE_REDUCTION_COEFFICIENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5270, + "src": "14786:26:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6020, + "name": "currentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "14770:11:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 2803, + "src": "14770:15:48", + "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": 6023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14770:43:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6024, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 2848, + "src": "14770:51:48", + "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": 6026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14770:69:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14756:83:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6028, + "nodeType": "ExpressionStatement", + "src": "14756:83:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6030, + "name": "currentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5895, + "src": "14860:11:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 6031, + "name": "INITIAL_RATE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5262, + "src": "14875:12:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14860:27:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 6029, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "14853:6:48", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 6033, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14853:35:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6034, + "nodeType": "ExpressionStatement", + "src": "14853:35:48" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5941, + "name": "epoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5938, + "src": "13769:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "393939", + "id": 5942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13777:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_999_by_1", + "typeString": "int_const 999" + }, + "value": "999" + }, + "src": "13769:11:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6036, + "initializationExpression": { + "assignments": [ + 5938 + ], + "declarations": [ + { + "constant": false, + "id": 5938, + "mutability": "mutable", + "name": "epoch", + "nodeType": "VariableDeclaration", + "scope": 6036, + "src": "13750:13:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5937, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13750:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5940, + "initialValue": { + "hexValue": "30", + "id": 5939, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13766:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13750:17:48" + }, + "loopExpression": { + "expression": { + "id": 5945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "13782:7:48", + "subExpression": { + "id": 5944, + "name": "epoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5938, + "src": "13784:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5946, + "nodeType": "ExpressionStatement", + "src": "13782:7:48" + }, + "nodeType": "ForStatement", + "src": "13745:1154:48" + }, + { + "expression": { + "id": 6037, + "name": "toMint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5934, + "src": "14916:6:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5882, + "id": 6038, + "nodeType": "Return", + "src": "14909:13:48" + } + ] + }, + "documentation": { + "id": 5874, + "nodeType": "StructuredDocumentation", + "src": "12712:263:48", + "text": " @notice How much supply is mintable from start timestamp till end timestamp\n @param start Start of the time interval (timestamp)\n @param end End of the time interval (timestamp)\n @return Tokens mintable from `start` till `end`" + }, + "id": 6040, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mintableInTimeframe", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5879, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5876, + "mutability": "mutable", + "name": "start", + "nodeType": "VariableDeclaration", + "scope": 6040, + "src": "13010:13:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5875, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13010:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5878, + "mutability": "mutable", + "name": "end", + "nodeType": "VariableDeclaration", + "scope": 6040, + "src": "13025:11:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5877, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13025:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13009:28:48" + }, + "returnParameters": { + "id": 5882, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5881, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6040, + "src": "13061:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5880, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13061:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13060:9:48" + }, + "scope": 6117, + "src": "12980:1949:48", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 292 + ], + "body": { + "id": 6048, + "nodeType": "Block", + "src": "15201:29:48", + "statements": [ + { + "expression": { + "id": 6046, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5295, + "src": "15218:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6045, + "id": 6047, + "nodeType": "Return", + "src": "15211:12:48" + } + ] + }, + "functionSelector": "2c4e722e", + "id": 6049, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "rate", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6042, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "15174:8:48" + }, + "parameters": { + "id": 6041, + "nodeType": "ParameterList", + "parameters": [], + "src": "15157:2:48" + }, + "returnParameters": { + "id": 6045, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6044, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6049, + "src": "15192:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6043, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15192:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15191:9:48" + }, + "scope": 6117, + "src": "15144:86:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6057, + "nodeType": "Block", + "src": "15296:42:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6054, + "name": "_availableSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5791, + "src": "15313:16:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 6055, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15313:18:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6053, + "id": 6056, + "nodeType": "Return", + "src": "15306:25:48" + } + ] + }, + "functionSelector": "24f92a25", + "id": 6058, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "available_supply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6050, + "nodeType": "ParameterList", + "parameters": [], + "src": "15261:2:48" + }, + "returnParameters": { + "id": 6053, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6052, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6058, + "src": "15287:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6051, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15287:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15286:9:48" + }, + "scope": 6117, + "src": "15236:102:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6067, + "nodeType": "Block", + "src": "15578:46:48", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6064, + "name": "_startEpochTimeWrite", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5818, + "src": "15595:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$", + "typeString": "function () returns (uint256)" + } + }, + "id": 6065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15595:22:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6063, + "id": 6066, + "nodeType": "Return", + "src": "15588:29:48" + } + ] + }, + "documentation": { + "id": 6059, + "nodeType": "StructuredDocumentation", + "src": "15344:168:48", + "text": " @notice Get timestamp of the current mining epoch start while simultaneously updating mining parameters\n @return Timestamp of the current epoch" + }, + "functionSelector": "adc4cf43", + "id": 6068, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "start_epoch_time_write", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6060, + "nodeType": "ParameterList", + "parameters": [], + "src": "15548:2:48" + }, + "returnParameters": { + "id": 6063, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6062, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6068, + "src": "15569:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6061, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15569:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15568:9:48" + }, + "scope": 6117, + "src": "15517:107:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6080, + "nodeType": "Block", + "src": "15859:71:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6077, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "15903:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6074, + "name": "_startEpochTimeWrite", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5818, + "src": "15876:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$", + "typeString": "function () returns (uint256)" + } + }, + "id": 6075, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15876:22:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "15876:26:48", + "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": 6078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15876:47:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6073, + "id": 6079, + "nodeType": "Return", + "src": "15869:54:48" + } + ] + }, + "documentation": { + "id": 6069, + "nodeType": "StructuredDocumentation", + "src": "15630:162:48", + "text": " @notice Get timestamp of the next mining epoch start while simultaneously updating mining parameters\n @return Timestamp of the next epoch" + }, + "functionSelector": "b26b238e", + "id": 6081, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "future_epoch_time_write", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6070, + "nodeType": "ParameterList", + "parameters": [], + "src": "15829:2:48" + }, + "returnParameters": { + "id": 6073, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6072, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6081, + "src": "15850:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6071, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15850:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15849:9:48" + }, + "scope": 6117, + "src": "15797:133:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6099, + "nodeType": "Block", + "src": "16205:150:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6092, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6086, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "16223:5:48", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 6087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "16223:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [ + { + "id": 6090, + "name": "RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5266, + "src": "16262:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6088, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5291, + "src": "16242:15:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2626, + "src": "16242:19:48", + "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": 6091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16242:40:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16223:59:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "45706f636820686173206e6f742066696e697368656420796574", + "id": 6093, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16284:28:48", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_844f8669d9677550455a55a9e49a7c619dce5f058c358110abeab9cb013df878", + "typeString": "literal_string \"Epoch has not finished yet\"" + }, + "value": "Epoch has not finished yet" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_844f8669d9677550455a55a9e49a7c619dce5f058c358110abeab9cb013df878", + "typeString": "literal_string \"Epoch has not finished yet\"" + } + ], + "id": 6085, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "16215:7:48", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16215:98:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6095, + "nodeType": "ExpressionStatement", + "src": "16215:98:48" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6096, + "name": "_updateMiningParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5873, + "src": "16323:23:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 6097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16323:25:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6098, + "nodeType": "ExpressionStatement", + "src": "16323:25:48" + } + ] + }, + "documentation": { + "id": 6082, + "nodeType": "StructuredDocumentation", + "src": "15936:219:48", + "text": " @notice Update mining rate and supply at the start of the epoch\n @dev Callable by any address, but only once per epoch\n Total supply becomes slightly larger if this function is called late" + }, + "functionSelector": "d43b40fa", + "id": 6100, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "update_mining_parameters", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6083, + "nodeType": "ParameterList", + "parameters": [], + "src": "16193:2:48" + }, + "returnParameters": { + "id": 6084, + "nodeType": "ParameterList", + "parameters": [], + "src": "16205:0:48" + }, + "scope": 6117, + "src": "16160:195:48", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6115, + "nodeType": "Block", + "src": "16720:56:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6111, + "name": "start", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6103, + "src": "16758:5:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6112, + "name": "end", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6105, + "src": "16765:3:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6110, + "name": "_mintableInTimeframe", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6040, + "src": "16737:20:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) view returns (uint256)" + } + }, + "id": 6113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16737:32:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6109, + "id": 6114, + "nodeType": "Return", + "src": "16730:39:48" + } + ] + }, + "documentation": { + "id": 6101, + "nodeType": "StructuredDocumentation", + "src": "16361:263:48", + "text": " @notice How much supply is mintable from start timestamp till end timestamp\n @param start Start of the time interval (timestamp)\n @param end End of the time interval (timestamp)\n @return Tokens mintable from `start` till `end`" + }, + "functionSelector": "d725a9ca", + "id": 6116, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mintable_in_timeframe", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6106, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6103, + "mutability": "mutable", + "name": "start", + "nodeType": "VariableDeclaration", + "scope": 6116, + "src": "16660:13:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16660:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6105, + "mutability": "mutable", + "name": "end", + "nodeType": "VariableDeclaration", + "scope": 6116, + "src": "16675:11:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6104, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16675:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16659:28:48" + }, + "returnParameters": { + "id": 6109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6108, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6116, + "src": "16711:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6107, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16711:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16710:9:48" + }, + "scope": 6117, + "src": "16629:147:48", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 6118, + "src": "1910:14868:48" + } + ], + "src": "688:16091:48" + }, + "id": 48 + }, + "contracts/SmartWalletChecker.sol": { + "ast": { + "absolutePath": "contracts/SmartWalletChecker.sol", + "exportedSymbols": { + "SmartWalletChecker": [ + 6263 + ] + }, + "id": 6264, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6119, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:49" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol", + "id": 6120, + "nodeType": "ImportDirective", + "scope": 6264, + "sourceUnit": 910, + "src": "713:89:49", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 6121, + "nodeType": "ImportDirective", + "scope": 6264, + "sourceUnit": 2289, + "src": "803:65:49", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "id": 6122, + "nodeType": "ImportDirective", + "scope": 6264, + "sourceUnit": 2573, + "src": "870:88:49", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol", + "id": 6123, + "nodeType": "ImportDirective", + "scope": 6264, + "sourceUnit": 4366, + "src": "959:83:49", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 6124, + "name": "ISmartWalletChecker", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 909, + "src": "1075:19:49", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISmartWalletChecker_$909", + "typeString": "contract ISmartWalletChecker" + } + }, + "id": 6125, + "nodeType": "InheritanceSpecifier", + "src": "1075:19:49" + }, + { + "baseName": { + "id": 6126, + "name": "SingletonAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2572, + "src": "1096:23:49", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + }, + "id": 6127, + "nodeType": "InheritanceSpecifier", + "src": "1096:23:49" + } + ], + "contractDependencies": [ + 909, + 1520, + 2365, + 2572 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 6263, + "linearizedBaseContracts": [ + 6263, + 2572, + 2365, + 1520, + 909 + ], + "name": "SmartWalletChecker", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 6130, + "libraryName": { + "id": 6128, + "name": "EnumerableSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4365, + "src": "1132:13:49", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EnumerableSet_$4365", + "typeString": "library EnumerableSet" + } + }, + "nodeType": "UsingForDirective", + "src": "1126:49:49", + "typeName": { + "id": 6129, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "1150:24:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + } + }, + { + "anonymous": false, + "id": 6134, + "name": "ContractAddressAdded", + "nodeType": "EventDefinition", + "parameters": { + "id": 6133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6132, + "indexed": false, + "mutability": "mutable", + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 6134, + "src": "1208:23:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6131, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1208:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1207:25:49" + }, + "src": "1181:52:49" + }, + { + "anonymous": false, + "id": 6138, + "name": "ContractAddressRemoved", + "nodeType": "EventDefinition", + "parameters": { + "id": 6137, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6136, + "indexed": false, + "mutability": "mutable", + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 6138, + "src": "1267:23:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6135, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1267:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1266:25:49" + }, + "src": "1238:54:49" + }, + { + "constant": false, + "id": 6140, + "mutability": "mutable", + "name": "_allowlistedAddresses", + "nodeType": "VariableDeclaration", + "scope": 6263, + "src": "1298:54:49", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 6139, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "1298:24:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 6174, + "nodeType": "Block", + "src": "1458:198:49", + "statements": [ + { + "assignments": [ + 6152 + ], + "declarations": [ + { + "constant": false, + "id": 6152, + "mutability": "mutable", + "name": "addressesLength", + "nodeType": "VariableDeclaration", + "scope": 6174, + "src": "1468:23:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6151, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1468:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6155, + "initialValue": { + "expression": { + "id": 6153, + "name": "initialAllowedAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6145, + "src": "1494:23:49", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 6154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1494:30:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1468:56:49" + }, + { + "body": { + "id": 6172, + "nodeType": "Block", + "src": "1580:70:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 6167, + "name": "initialAllowedAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6145, + "src": "1612:23:49", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 6169, + "indexExpression": { + "id": 6168, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6157, + "src": "1636:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1612:26:49", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6166, + "name": "_allowlistAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6262, + "src": "1594:17:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 6170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1594:45:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6171, + "nodeType": "ExpressionStatement", + "src": "1594:45:49" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6160, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6157, + "src": "1554:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 6161, + "name": "addressesLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6152, + "src": "1558:15:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1554:19:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6173, + "initializationExpression": { + "assignments": [ + 6157 + ], + "declarations": [ + { + "constant": false, + "id": 6157, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 6173, + "src": "1539:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6156, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1539:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6159, + "initialValue": { + "hexValue": "30", + "id": 6158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1551:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1539:13:49" + }, + "loopExpression": { + "expression": { + "id": 6164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "1575:3:49", + "subExpression": { + "id": 6163, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6157, + "src": "1577:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6165, + "nodeType": "ExpressionStatement", + "src": "1575:3:49" + }, + "nodeType": "ForStatement", + "src": "1534:116:49" + } + ] + }, + "id": 6175, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 6148, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6142, + "src": "1451:5:49", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + } + ], + "id": 6149, + "modifierName": { + "id": 6147, + "name": "SingletonAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "1427:23:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SingletonAuthentication_$2572_$", + "typeString": "type(contract SingletonAuthentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1427:30:49" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6146, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6142, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 6175, + "src": "1371:12:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6141, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1371:6:49", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6145, + "mutability": "mutable", + "name": "initialAllowedAddresses", + "nodeType": "VariableDeclaration", + "scope": 6175, + "src": "1385:40:49", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 6143, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1385:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 6144, + "nodeType": "ArrayTypeName", + "src": "1385:9:49", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "1370:56:49" + }, + "returnParameters": { + "id": 6150, + "nodeType": "ParameterList", + "parameters": [], + "src": "1458:0:49" + }, + "scope": 6263, + "src": "1359:297:49", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 908 + ], + "body": { + "id": 6188, + "nodeType": "Block", + "src": "1740:71:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6185, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6177, + "src": "1788:15:49", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 6183, + "name": "_allowlistedAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6140, + "src": "1757:21:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 6184, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contains", + "nodeType": "MemberAccess", + "referencedDeclaration": 4068, + "src": "1757:30:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)" + } + }, + "id": 6186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1757:47:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 6182, + "id": 6187, + "nodeType": "Return", + "src": "1750:54:49" + } + ] + }, + "functionSelector": "c23697a8", + "id": 6189, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "check", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6179, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1716:8:49" + }, + "parameters": { + "id": 6178, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6177, + "mutability": "mutable", + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 6189, + "src": "1677:23:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6176, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1677:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1676:25:49" + }, + "returnParameters": { + "id": 6182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6181, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6189, + "src": "1734:4:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6180, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1734:4:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1733:6:49" + }, + "scope": 6263, + "src": "1662:149:49", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6201, + "nodeType": "Block", + "src": "1895:55:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6198, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6191, + "src": "1937:5:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6196, + "name": "_allowlistedAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6140, + "src": "1912:21:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 6197, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "at", + "nodeType": "MemberAccess", + "referencedDeclaration": 4107, + "src": "1912:24:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)" + } + }, + "id": 6199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1912:31:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 6195, + "id": 6200, + "nodeType": "Return", + "src": "1905:38:49" + } + ] + }, + "functionSelector": "2ee7ca64", + "id": 6202, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAllowlistedAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6192, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6191, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 6202, + "src": "1848:13:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6190, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1848:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1847:15:49" + }, + "returnParameters": { + "id": 6195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6194, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6202, + "src": "1886:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6193, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1886:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1885:9:49" + }, + "scope": 6263, + "src": "1817:133:49", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6211, + "nodeType": "Block", + "src": "2029:54:49", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 6207, + "name": "_allowlistedAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6140, + "src": "2046:21:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 6208, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": 4081, + "src": "2046:28:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)" + } + }, + "id": 6209, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2046:30:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6206, + "id": 6210, + "nodeType": "Return", + "src": "2039:37:49" + } + ] + }, + "functionSelector": "c7abf7e2", + "id": 6212, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAllowlistedAddressesLength", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6203, + "nodeType": "ParameterList", + "parameters": [], + "src": "1994:2:49" + }, + "returnParameters": { + "id": 6206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6205, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6212, + "src": "2020:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2020:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2019:9:49" + }, + "scope": 6263, + "src": "1956:127:49", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6223, + "nodeType": "Block", + "src": "2162:51:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6220, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6214, + "src": "2190:15:49", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6219, + "name": "_allowlistAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6262, + "src": "2172:17:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 6221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2172:34:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6222, + "nodeType": "ExpressionStatement", + "src": "2172:34:49" + } + ] + }, + "functionSelector": "f191aad0", + "id": 6224, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 6217, + "modifierName": { + "id": 6216, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "2149:12:49", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2149:12:49" + } + ], + "name": "allowlistAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6215, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6214, + "mutability": "mutable", + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 6224, + "src": "2115:23:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6213, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2115:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2114:25:49" + }, + "returnParameters": { + "id": 6218, + "nodeType": "ParameterList", + "parameters": [], + "src": "2162:0:49" + }, + "scope": 6263, + "src": "2089:124:49", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6243, + "nodeType": "Block", + "src": "2291:155:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 6234, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6226, + "src": "2338:15:49", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 6232, + "name": "_allowlistedAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6140, + "src": "2309:21:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 6233, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "remove", + "nodeType": "MemberAccess", + "referencedDeclaration": 4050, + "src": "2309:28:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)" + } + }, + "id": 6235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2309:45:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "41646472657373206973206e6f7420616c6c6f776c6973746564", + "id": 6236, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2356:28:49", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7225e4630e045b69ee32e4a65259148df21c7176dba39d73b744e663aedbed9f", + "typeString": "literal_string \"Address is not allowlisted\"" + }, + "value": "Address is not allowlisted" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7225e4630e045b69ee32e4a65259148df21c7176dba39d73b744e663aedbed9f", + "typeString": "literal_string \"Address is not allowlisted\"" + } + ], + "id": 6231, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2301:7:49", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6237, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2301:84:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6238, + "nodeType": "ExpressionStatement", + "src": "2301:84:49" + }, + { + "eventCall": { + "arguments": [ + { + "id": 6240, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6226, + "src": "2423:15:49", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6239, + "name": "ContractAddressRemoved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6138, + "src": "2400:22:49", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 6241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2400:39:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6242, + "nodeType": "EmitStatement", + "src": "2395:44:49" + } + ] + }, + "functionSelector": "a5ee4e71", + "id": 6244, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 6229, + "modifierName": { + "id": 6228, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "2278:12:49", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2278:12:49" + } + ], + "name": "denylistAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6227, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6226, + "mutability": "mutable", + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 6244, + "src": "2244:23:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6225, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2244:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2243:25:49" + }, + "returnParameters": { + "id": 6230, + "nodeType": "ParameterList", + "parameters": [], + "src": "2291:0:49" + }, + "scope": 6263, + "src": "2219:227:49", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6261, + "nodeType": "Block", + "src": "2540:151:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 6252, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6246, + "src": "2584:15:49", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 6250, + "name": "_allowlistedAddresses", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6140, + "src": "2558:21:49", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 6251, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3965, + "src": "2558:25:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)" + } + }, + "id": 6253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2558:42:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4164647265737320616c726561647920616c6c6f776c6973746564", + "id": 6254, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2602:29:49", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1ca8a1012c666cd160975f0b6c016234f4aa97efbe3db06b1302c23e5d5e37d0", + "typeString": "literal_string \"Address already allowlisted\"" + }, + "value": "Address already allowlisted" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1ca8a1012c666cd160975f0b6c016234f4aa97efbe3db06b1302c23e5d5e37d0", + "typeString": "literal_string \"Address already allowlisted\"" + } + ], + "id": 6249, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2550:7:49", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2550:82:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6256, + "nodeType": "ExpressionStatement", + "src": "2550:82:49" + }, + { + "eventCall": { + "arguments": [ + { + "id": 6258, + "name": "contractAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6246, + "src": "2668:15:49", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6257, + "name": "ContractAddressAdded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6134, + "src": "2647:20:49", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 6259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2647:37:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6260, + "nodeType": "EmitStatement", + "src": "2642:42:49" + } + ] + }, + "id": 6262, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_allowlistAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6247, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6246, + "mutability": "mutable", + "name": "contractAddress", + "nodeType": "VariableDeclaration", + "scope": 6262, + "src": "2506:23:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6245, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2506:7:49", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2505:25:49" + }, + "returnParameters": { + "id": 6248, + "nodeType": "ParameterList", + "parameters": [], + "src": "2540:0:49" + }, + "scope": 6263, + "src": "2479:212:49", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 6264, + "src": "1044:1649:49" + } + ], + "src": "688:2006:49" + }, + "id": 49 + }, + "contracts/VotingEscrowDelegationProxy.sol": { + "ast": { + "absolutePath": "contracts/VotingEscrowDelegationProxy.sol", + "exportedSymbols": { + "VotingEscrowDelegationProxy": [ + 6420 + ] + }, + "id": 6421, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6265, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:50" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol", + "id": 6266, + "nodeType": "ImportDirective", + "scope": 6421, + "sourceUnit": 966, + "src": "713:83:50", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 6267, + "nodeType": "ImportDirective", + "scope": 6421, + "sourceUnit": 2289, + "src": "797:65:50", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "id": 6268, + "nodeType": "ImportDirective", + "scope": 6421, + "sourceUnit": 2573, + "src": "864:88:50", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 6269, + "name": "SingletonAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2572, + "src": "994:23:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + }, + "id": 6270, + "nodeType": "InheritanceSpecifier", + "src": "994:23:50" + } + ], + "contractDependencies": [ + 1520, + 2365, + 2572 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 6420, + "linearizedBaseContracts": [ + 6420, + 2572, + 2365, + 1520 + ], + "name": "VotingEscrowDelegationProxy", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 6272, + "mutability": "immutable", + "name": "_votingEscrow", + "nodeType": "VariableDeclaration", + "scope": 6420, + "src": "1024:38:50", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6271, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1024:6:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6274, + "mutability": "mutable", + "name": "_delegation", + "nodeType": "VariableDeclaration", + "scope": 6420, + "src": "1068:33:50", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + }, + "typeName": { + "id": 6273, + "name": "IVeDelegation", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 965, + "src": "1068:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 6278, + "name": "DelegationImplementationUpdated", + "nodeType": "EventDefinition", + "parameters": { + "id": 6277, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6276, + "indexed": true, + "mutability": "mutable", + "name": "newImplementation", + "nodeType": "VariableDeclaration", + "scope": 6278, + "src": "1146:33:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6275, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1146:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1145:35:50" + }, + "src": "1108:73:50" + }, + { + "body": { + "id": 6298, + "nodeType": "Block", + "src": "1321:79:50", + "statements": [ + { + "expression": { + "id": 6292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6290, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6272, + "src": "1331:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6291, + "name": "votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6282, + "src": "1347:12:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "src": "1331:28:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 6293, + "nodeType": "ExpressionStatement", + "src": "1331:28:50" + }, + { + "expression": { + "id": 6296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6294, + "name": "_delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6274, + "src": "1369:11:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6295, + "name": "delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6284, + "src": "1383:10:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "src": "1369:24:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "id": 6297, + "nodeType": "ExpressionStatement", + "src": "1369:24:50" + } + ] + }, + "id": 6299, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 6287, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6280, + "src": "1314:5:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + } + ], + "id": 6288, + "modifierName": { + "id": 6286, + "name": "SingletonAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "1290:23:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SingletonAuthentication_$2572_$", + "typeString": "type(contract SingletonAuthentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1290:30:50" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6285, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6280, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 6299, + "src": "1208:12:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6279, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1208:6:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6282, + "mutability": "mutable", + "name": "votingEscrow", + "nodeType": "VariableDeclaration", + "scope": 6299, + "src": "1230:19:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6281, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1230:6:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6284, + "mutability": "mutable", + "name": "delegation", + "nodeType": "VariableDeclaration", + "scope": 6299, + "src": "1259:24:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + }, + "typeName": { + "id": 6283, + "name": "IVeDelegation", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 965, + "src": "1259:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "visibility": "internal" + } + ], + "src": "1198:91:50" + }, + "returnParameters": { + "id": 6289, + "nodeType": "ParameterList", + "parameters": [], + "src": "1321:0:50" + }, + "scope": 6420, + "src": "1187:213:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 6307, + "nodeType": "Block", + "src": "1570:35:50", + "statements": [ + { + "expression": { + "id": 6305, + "name": "_delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6274, + "src": "1587:11:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "functionReturnParameters": 6304, + "id": 6306, + "nodeType": "Return", + "src": "1580:18:50" + } + ] + }, + "documentation": { + "id": 6300, + "nodeType": "StructuredDocumentation", + "src": "1406:82:50", + "text": " @notice Returns the current delegation implementation contract." + }, + "functionSelector": "63408a90", + "id": 6308, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDelegationImplementation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6301, + "nodeType": "ParameterList", + "parameters": [], + "src": "1529:2:50" + }, + "returnParameters": { + "id": 6304, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6303, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6308, + "src": "1555:13:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + }, + "typeName": { + "id": 6302, + "name": "IVeDelegation", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 965, + "src": "1555:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "visibility": "internal" + } + ], + "src": "1554:15:50" + }, + "scope": 6420, + "src": "1493:112:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6316, + "nodeType": "Block", + "src": "1744:37:50", + "statements": [ + { + "expression": { + "id": 6314, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6272, + "src": "1761:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "functionReturnParameters": 6313, + "id": 6315, + "nodeType": "Return", + "src": "1754:20:50" + } + ] + }, + "documentation": { + "id": 6309, + "nodeType": "StructuredDocumentation", + "src": "1611:70:50", + "text": " @notice Returns the Voting Escrow (veBAL) contract." + }, + "functionSelector": "08b0308a", + "id": 6317, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVotingEscrow", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6310, + "nodeType": "ParameterList", + "parameters": [], + "src": "1710:2:50" + }, + "returnParameters": { + "id": 6313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6312, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6317, + "src": "1736:6:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6311, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1736:6:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1735:8:50" + }, + "scope": 6420, + "src": "1686:95:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6329, + "nodeType": "Block", + "src": "2060:48:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6326, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6320, + "src": "2096:4:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6325, + "name": "_adjustedBalanceOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6374, + "src": "2077:18:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view returns (uint256)" + } + }, + "id": 6327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2077:24:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6324, + "id": 6328, + "nodeType": "Return", + "src": "2070:31:50" + } + ] + }, + "documentation": { + "id": 6318, + "nodeType": "StructuredDocumentation", + "src": "1787:195:50", + "text": " @notice Get the adjusted veBAL balance from the active boost delegation contract\n @param user The user to query the adjusted veBAL balance of\n @return veBAL balance" + }, + "functionSelector": "25798418", + "id": 6330, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "adjustedBalanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6320, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 6330, + "src": "2014:12:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2014:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2013:14:50" + }, + "returnParameters": { + "id": 6324, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6323, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6330, + "src": "2051:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6322, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2051:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2050:9:50" + }, + "scope": 6420, + "src": "1987:121:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6342, + "nodeType": "Block", + "src": "2442:48:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6339, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6333, + "src": "2478:4:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6338, + "name": "_adjustedBalanceOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6374, + "src": "2459:18:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view returns (uint256)" + } + }, + "id": 6340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2459:24:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6337, + "id": 6341, + "nodeType": "Return", + "src": "2452:31:50" + } + ] + }, + "documentation": { + "id": 6331, + "nodeType": "StructuredDocumentation", + "src": "2114:195:50", + "text": " @notice Get the adjusted veBAL balance from the active boost delegation contract\n @param user The user to query the adjusted veBAL balance of\n @return veBAL balance" + }, + "functionSelector": "bbf7408a", + "id": 6343, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "adjusted_balance_of", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6334, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6333, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 6343, + "src": "2396:12:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6332, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2396:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2395:14:50" + }, + "returnParameters": { + "id": 6337, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6336, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6343, + "src": "2433:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6335, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2433:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2432:9:50" + }, + "scope": 6420, + "src": "2367:123:50", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6373, + "nodeType": "Block", + "src": "2597:234:50", + "statements": [ + { + "assignments": [ + 6351 + ], + "declarations": [ + { + "constant": false, + "id": 6351, + "mutability": "mutable", + "name": "implementation", + "nodeType": "VariableDeclaration", + "scope": 6373, + "src": "2607:28:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + }, + "typeName": { + "id": 6350, + "name": "IVeDelegation", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 965, + "src": "2607:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "visibility": "internal" + } + ], + "id": 6353, + "initialValue": { + "id": 6352, + "name": "_delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6274, + "src": "2638:11:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2607:42:50" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + }, + "id": 6358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6354, + "name": "implementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6351, + "src": "2663:14:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 6356, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2695:1:50", + "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": 6355, + "name": "IVeDelegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 965, + "src": "2681:13:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVeDelegation_$965_$", + "typeString": "type(contract IVeDelegation)" + } + }, + "id": 6357, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2681:16:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "src": "2663:34:50", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6367, + "nodeType": "IfStatement", + "src": "2659:109:50", + "trueBody": { + "id": 6366, + "nodeType": "Block", + "src": "2699:69:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6363, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6345, + "src": "2752:4:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 6360, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6272, + "src": "2727:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 6359, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1650, + "src": "2720:6:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1650_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 6361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2720:21:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 6362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 1589, + "src": "2720:31:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 6364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2720:37:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6349, + "id": 6365, + "nodeType": "Return", + "src": "2713:44:50" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 6370, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6345, + "src": "2819:4:50", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 6368, + "name": "implementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6351, + "src": "2784:14:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "id": 6369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "adjusted_balance_of", + "nodeType": "MemberAccess", + "referencedDeclaration": 964, + "src": "2784:34:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 6371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2784:40:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6349, + "id": 6372, + "nodeType": "Return", + "src": "2777:47:50" + } + ] + }, + "id": 6374, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_adjustedBalanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6346, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6345, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 6374, + "src": "2551:12:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6344, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2551:7:50", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2550:14:50" + }, + "returnParameters": { + "id": 6349, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6348, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6374, + "src": "2588:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6347, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2588:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2587:9:50" + }, + "scope": 6420, + "src": "2523:308:50", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6399, + "nodeType": "Block", + "src": "2932:221:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 6384, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3033:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 6385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3033:10:50", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "id": 6381, + "name": "delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6376, + "src": "3002:10:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "id": 6383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "adjusted_balance_of", + "nodeType": "MemberAccess", + "referencedDeclaration": 964, + "src": "3002:30:50", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 6386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3002:42:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6387, + "nodeType": "ExpressionStatement", + "src": "3002:42:50" + }, + { + "expression": { + "id": 6390, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6388, + "name": "_delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6274, + "src": "3055:11:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6389, + "name": "delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6376, + "src": "3069:10:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "src": "3055:24:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "id": 6391, + "nodeType": "ExpressionStatement", + "src": "3055:24:50" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [ + { + "id": 6395, + "name": "delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6376, + "src": "3134:10:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + ], + "id": 6394, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3126:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6393, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3126:7:50", + "typeDescriptions": {} + } + }, + "id": 6396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3126:19:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6392, + "name": "DelegationImplementationUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6278, + "src": "3094:31:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 6397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3094:52:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6398, + "nodeType": "EmitStatement", + "src": "3089:57:50" + } + ] + }, + "functionSelector": "e6b3e704", + "id": 6400, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 6379, + "modifierName": { + "id": 6378, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "2919:12:50", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2919:12:50" + } + ], + "name": "setDelegation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6377, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6376, + "mutability": "mutable", + "name": "delegation", + "nodeType": "VariableDeclaration", + "scope": 6400, + "src": "2884:24:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + }, + "typeName": { + "id": 6375, + "name": "IVeDelegation", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 965, + "src": "2884:13:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "visibility": "internal" + } + ], + "src": "2883:26:50" + }, + "returnParameters": { + "id": 6380, + "nodeType": "ParameterList", + "parameters": [], + "src": "2932:0:50" + }, + "scope": 6420, + "src": "2861:292:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6418, + "nodeType": "Block", + "src": "3207:105:50", + "statements": [ + { + "expression": { + "id": 6409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6405, + "name": "_delegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6274, + "src": "3217:11:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "30", + "id": 6407, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3245:1:50", + "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": 6406, + "name": "IVeDelegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 965, + "src": "3231:13:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVeDelegation_$965_$", + "typeString": "type(contract IVeDelegation)" + } + }, + "id": 6408, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3231:16:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "src": "3217:30:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVeDelegation_$965", + "typeString": "contract IVeDelegation" + } + }, + "id": 6410, + "nodeType": "ExpressionStatement", + "src": "3217:30:50" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 6414, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3302:1:50", + "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": 6413, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3294:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6412, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3294:7:50", + "typeDescriptions": {} + } + }, + "id": 6415, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3294:10:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 6411, + "name": "DelegationImplementationUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6278, + "src": "3262:31:50", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 6416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3262:43:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6417, + "nodeType": "EmitStatement", + "src": "3257:48:50" + } + ] + }, + "functionSelector": "6448a3ab", + "id": 6419, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 6403, + "modifierName": { + "id": 6402, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "3194:12:50", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3194:12:50" + } + ], + "name": "killDelegation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6401, + "nodeType": "ParameterList", + "parameters": [], + "src": "3182:2:50" + }, + "returnParameters": { + "id": 6404, + "nodeType": "ParameterList", + "parameters": [], + "src": "3207:0:50" + }, + "scope": 6420, + "src": "3159:153:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 6421, + "src": "954:2360:50" + } + ], + "src": "688:2627:50" + }, + "id": 50 + }, + "contracts/admin/AuthorizerAdaptor.sol": { + "ast": { + "absolutePath": "contracts/admin/AuthorizerAdaptor.sol", + "exportedSymbols": { + "AuthorizerAdaptor": [ + 6562 + ] + }, + "id": 6563, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6422, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:51" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "id": 6423, + "nodeType": "ImportDirective", + "scope": 6563, + "sourceUnit": 29, + "src": "713:88:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "id": 6424, + "nodeType": "ImportDirective", + "scope": 6563, + "sourceUnit": 1740, + "src": "802:70:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 6425, + "nodeType": "ImportDirective", + "scope": 6563, + "sourceUnit": 2289, + "src": "873:65:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "id": 6426, + "nodeType": "ImportDirective", + "scope": 6563, + "sourceUnit": 4422, + "src": "940:85:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol", + "id": 6427, + "nodeType": "ImportDirective", + "scope": 6563, + "sourceUnit": 3052, + "src": "1026:77:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 6429, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1745:18:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 6430, + "nodeType": "InheritanceSpecifier", + "src": "1745:18:51" + }, + { + "baseName": { + "id": 6431, + "name": "ReentrancyGuard", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4421, + "src": "1765:15:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ReentrancyGuard_$4421", + "typeString": "contract ReentrancyGuard" + } + }, + "id": 6432, + "nodeType": "InheritanceSpecifier", + "src": "1765:15:51" + } + ], + "contractDependencies": [ + 28, + 1520, + 4421 + ], + "contractKind": "contract", + "documentation": { + "id": 6428, + "nodeType": "StructuredDocumentation", + "src": "1105:609:51", + "text": " @title Authorizer Adaptor\n @notice This contract is intended to act as an adaptor between systems which expect a single admin address\n and the Balancer Authorizer such that the Authorizer may grant/revoke admin powers to unlimited addresses.\n The permissions the Authorizer can grant are granular such they may be global or specific to a particular contract\n @dev When calculating the actionId to call a function on a target contract, it must be calculated as if it were\n to be called on this adaptor. This can be done by passing the function selector to the `getActionId` function." + }, + "fullyImplemented": true, + "id": 6562, + "linearizedBaseContracts": [ + 6562, + 4421, + 28, + 1520 + ], + "name": "AuthorizerAdaptor", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 6435, + "libraryName": { + "id": 6433, + "name": "Address", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3051, + "src": "1793:7:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Address_$3051", + "typeString": "library Address" + } + }, + "nodeType": "UsingForDirective", + "src": "1787:26:51", + "typeName": { + "id": 6434, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1805:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + { + "constant": false, + "id": 6437, + "mutability": "immutable", + "name": "_actionIdDisambiguator", + "nodeType": "VariableDeclaration", + "scope": 6562, + "src": "1819:48:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6436, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1819:7:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6439, + "mutability": "immutable", + "name": "_vault", + "nodeType": "VariableDeclaration", + "scope": 6562, + "src": "1873:31:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6438, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1873:6:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 6461, + "nodeType": "Block", + "src": "1937:211:51", + "statements": [ + { + "expression": { + "id": 6455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6444, + "name": "_actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6437, + "src": "2061:22:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 6451, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2110:4:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_AuthorizerAdaptor_$6562", + "typeString": "contract AuthorizerAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_AuthorizerAdaptor_$6562", + "typeString": "contract AuthorizerAdaptor" + } + ], + "id": 6450, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2102:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6449, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2102:7:51", + "typeDescriptions": {} + } + }, + "id": 6452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2102:13:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6448, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2094:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6447, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2094:7:51", + "typeDescriptions": {} + } + }, + "id": 6453, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2094:22:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6446, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2086:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6445, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2086:7:51", + "typeDescriptions": {} + } + }, + "id": 6454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2086:31:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2061:56:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 6456, + "nodeType": "ExpressionStatement", + "src": "2061:56:51" + }, + { + "expression": { + "id": 6459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6457, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6439, + "src": "2127:6:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6458, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6441, + "src": "2136:5:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "src": "2127:14:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "id": 6460, + "nodeType": "ExpressionStatement", + "src": "2127:14:51" + } + ] + }, + "id": 6462, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6442, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6441, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 6462, + "src": "1923:12:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6440, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1923:6:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1922:14:51" + }, + "returnParameters": { + "id": 6443, + "nodeType": "ParameterList", + "parameters": [], + "src": "1937:0:51" + }, + "scope": 6562, + "src": "1911:237:51", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 11 + ], + "body": { + "id": 6471, + "nodeType": "Block", + "src": "2270:30:51", + "statements": [ + { + "expression": { + "id": 6469, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6439, + "src": "2287:6:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "functionReturnParameters": 6468, + "id": 6470, + "nodeType": "Return", + "src": "2280:13:51" + } + ] + }, + "documentation": { + "id": 6463, + "nodeType": "StructuredDocumentation", + "src": "2154:53:51", + "text": " @notice Returns the Balancer Vault" + }, + "functionSelector": "8d928af8", + "id": 6472, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVault", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6465, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2244:8:51" + }, + "parameters": { + "id": 6464, + "nodeType": "ParameterList", + "parameters": [], + "src": "2229:2:51" + }, + "returnParameters": { + "id": 6468, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6467, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6472, + "src": "2262:6:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6466, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "2262:6:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "2261:8:51" + }, + "scope": 6562, + "src": "2212:88:51", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 17 + ], + "body": { + "id": 6484, + "nodeType": "Block", + "src": "2428:50:51", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6479, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6472, + "src": "2445:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2288_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 6480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2445:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "id": 6481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getAuthorizer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1848, + "src": "2445:24:51", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1739_$", + "typeString": "function () view external returns (contract IAuthorizer)" + } + }, + "id": 6482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2445:26:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "functionReturnParameters": 6478, + "id": 6483, + "nodeType": "Return", + "src": "2438:33:51" + } + ] + }, + "documentation": { + "id": 6473, + "nodeType": "StructuredDocumentation", + "src": "2306:49:51", + "text": " @notice Returns the Authorizer" + }, + "functionSelector": "aaabadc5", + "id": 6485, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6475, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2397:8:51" + }, + "parameters": { + "id": 6474, + "nodeType": "ParameterList", + "parameters": [], + "src": "2382:2:51" + }, + "returnParameters": { + "id": 6478, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6477, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6485, + "src": "2415:11:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 6476, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1739, + "src": "2415:11:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "2414:13:51" + }, + "scope": 6562, + "src": "2360:118:51", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 6504, + "nodeType": "Block", + "src": "2614:76:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6499, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6487, + "src": "2658:8:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6500, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6489, + "src": "2668:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6501, + "name": "where", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6491, + "src": "2677:5:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6496, + "name": "getAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6485, + "src": "2631:13:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$1739_$", + "typeString": "function () view returns (contract IAuthorizer)" + } + }, + "id": 6497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2631:15:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1739", + "typeString": "contract IAuthorizer" + } + }, + "id": 6498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "canPerform", + "nodeType": "MemberAccess", + "referencedDeclaration": 1738, + "src": "2631:26:51", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address,address) view external returns (bool)" + } + }, + "id": 6502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2631:52:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 6495, + "id": 6503, + "nodeType": "Return", + "src": "2624:59:51" + } + ] + }, + "id": 6505, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6492, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6487, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 6505, + "src": "2514:16:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6486, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2514:7:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6489, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 6505, + "src": "2540:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6488, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2540:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6491, + "mutability": "mutable", + "name": "where", + "nodeType": "VariableDeclaration", + "scope": 6505, + "src": "2565:13:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6490, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2565:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2504:80:51" + }, + "returnParameters": { + "id": 6495, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6494, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6505, + "src": "2608:4:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6493, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2608:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2607:6:51" + }, + "scope": 6562, + "src": "2484:206:51", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1519 + ], + "body": { + "id": 6522, + "nodeType": "Block", + "src": "3348:85:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 6517, + "name": "_actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6437, + "src": "3392:22:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6518, + "name": "selector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6508, + "src": "3416:8:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "expression": { + "id": 6515, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3375:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6516, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "3375:16:51", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6519, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3375:50:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6514, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3365:9:51", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 6520, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3365:61:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6513, + "id": 6521, + "nodeType": "Return", + "src": "3358:68:51" + } + ] + }, + "documentation": { + "id": 6506, + "nodeType": "StructuredDocumentation", + "src": "2696:570:51", + "text": " @notice Returns the action ID associated with calling a given function through this adaptor\n @dev As the contracts managed by this adaptor don't have action ID disambiguators, we use the adaptor's globally.\n This means that contracts with the same function selector will have a matching action ID:\n if granularity is required then permissions must not be granted globally in the Authorizer.\n @param selector - The 4 byte selector of the function to be called using `performAction`\n @return The associated action ID" + }, + "functionSelector": "851c1bb3", + "id": 6523, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getActionId", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6510, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3321:8:51" + }, + "parameters": { + "id": 6509, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6508, + "mutability": "mutable", + "name": "selector", + "nodeType": "VariableDeclaration", + "scope": 6523, + "src": "3292:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 6507, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "3292:6:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "3291:17:51" + }, + "returnParameters": { + "id": 6513, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6512, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6523, + "src": "3339:7:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6511, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3339:7:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3338:9:51" + }, + "scope": 6562, + "src": "3271:162:51", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 27 + ], + "body": { + "id": 6560, + "nodeType": "Block", + "src": "3941:1092:51", + "statements": [ + { + "assignments": [ + 6537 + ], + "declarations": [ + { + "constant": false, + "id": 6537, + "mutability": "mutable", + "name": "selector", + "nodeType": "VariableDeclaration", + "scope": 6560, + "src": "3951:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 6536, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "3951:6:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 6538, + "nodeType": "VariableDeclarationStatement", + "src": "3951:15:51" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "4409:362:51", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4732:29:51", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4757:3:51", + "type": "", + "value": "100" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4744:12:51" + }, + "nodeType": "YulFunctionCall", + "src": "4744:17:51" + }, + "variableNames": [ + { + "name": "selector", + "nodeType": "YulIdentifier", + "src": "4732:8:51" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 6537, + "isOffset": false, + "isSlot": false, + "src": "4732:8:51", + "valueSize": 1 + } + ], + "id": 6539, + "nodeType": "InlineAssembly", + "src": "4400:371:51" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 6543, + "name": "selector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6537, + "src": "4814:8:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 6542, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6523, + "src": "4802:11:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 6544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4802:21:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 6545, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4825:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 6546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4825:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 6547, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6526, + "src": "4837:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6541, + "name": "_canPerform", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6505, + "src": "4790:11:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address,address) view returns (bool)" + } + }, + "id": 6548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4790:54:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6549, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1509, + "src": "4846:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1509_$", + "typeString": "type(library Errors)" + } + }, + "id": 6550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SENDER_NOT_ALLOWED", + "nodeType": "MemberAccess", + "referencedDeclaration": 1307, + "src": "4846:25:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6540, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1053, + "src": "4781:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4781:91:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6552, + "nodeType": "ExpressionStatement", + "src": "4781:91:51" + }, + { + "expression": { + "arguments": [ + { + "id": 6555, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6528, + "src": "5010:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + { + "expression": { + "id": 6556, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5016:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 6557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "value", + "nodeType": "MemberAccess", + "src": "5016:9:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6553, + "name": "target", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6526, + "src": "4981:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 6554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "functionCallWithValue", + "nodeType": "MemberAccess", + "referencedDeclaration": 2995, + "src": "4981:28:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$", + "typeString": "function (address,bytes memory,uint256) returns (bytes memory)" + } + }, + "id": 6558, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4981:45:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6535, + "id": 6559, + "nodeType": "Return", + "src": "4974:52:51" + } + ] + }, + "documentation": { + "id": 6524, + "nodeType": "StructuredDocumentation", + "src": "3439:331:51", + "text": " @notice Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\n @param target - Address of the contract to be called\n @param data - Calldata to be sent to the target contract\n @return The bytes encoded return value from the performed function call" + }, + "functionSelector": "4036176a", + "id": 6561, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 6532, + "modifierName": { + "id": 6531, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "3893:12:51", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3893:12:51" + } + ], + "name": "performAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6530, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3876:8:51" + }, + "parameters": { + "id": 6529, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6526, + "mutability": "mutable", + "name": "target", + "nodeType": "VariableDeclaration", + "scope": 6561, + "src": "3798:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6525, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3798:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6528, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 6561, + "src": "3814:19:51", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6527, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3814:5:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3797:37:51" + }, + "returnParameters": { + "id": 6535, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6534, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6561, + "src": "3923:12:51", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6533, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3923:5:51", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3922:14:51" + }, + "scope": 6562, + "src": "3775:1258:51", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 6563, + "src": "1715:3320:51" + } + ], + "src": "688:4348:51" + }, + "id": 51 + }, + "contracts/admin/ChildChainGaugeTokenAdder.sol": { + "ast": { + "absolutePath": "contracts/admin/ChildChainGaugeTokenAdder.sol", + "exportedSymbols": { + "ChildChainGaugeTokenAdder": [ + 6763 + ] + }, + "id": 6764, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6564, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:52" + }, + { + "id": 6565, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:52" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol", + "id": 6566, + "nodeType": "ImportDirective", + "scope": 6764, + "sourceUnit": 376, + "src": "747:102:52", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "id": 6567, + "nodeType": "ImportDirective", + "scope": 6764, + "sourceUnit": 29, + "src": "850:88:52", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "id": 6568, + "nodeType": "ImportDirective", + "scope": 6764, + "sourceUnit": 2573, + "src": "940:88:52", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 6570, + "name": "SingletonAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2572, + "src": "1260:23:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + }, + "id": 6571, + "nodeType": "InheritanceSpecifier", + "src": "1260:23:52" + } + ], + "contractDependencies": [ + 1520, + 2365, + 2572 + ], + "contractKind": "contract", + "documentation": { + "id": 6569, + "nodeType": "StructuredDocumentation", + "src": "1030:191:52", + "text": " @title ChildChainGaugeTokenAdder\n @notice Allows atomically adding a new reward token to a RewardsOnlyGauge while ensuring that it remains in sync\n with its ChildChainStreamer." + }, + "fullyImplemented": true, + "id": 6763, + "linearizedBaseContracts": [ + 6763, + 2572, + 2365, + 1520 + ], + "name": "ChildChainGaugeTokenAdder", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 6581, + "mutability": "constant", + "name": "_CLAIM_SIG", + "nodeType": "VariableDeclaration", + "scope": 6763, + "src": "1488:75:52", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6572, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1488:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6580, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "hexValue": "6765745f7265776172642829", + "id": 6574, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1536:14:52", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1afe22a60e4e4b5fa7561dbfb52f5a766eba86c52b84c4946364e82fa9056a57", + "typeString": "literal_string \"get_reward()\"" + }, + "value": "get_reward()" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_1afe22a60e4e4b5fa7561dbfb52f5a766eba86c52b84c4946364e82fa9056a57", + "typeString": "literal_string \"get_reward()\"" + } + ], + "id": 6573, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1526:9:52", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 6575, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1526:25:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_rational_224_by_1", + "typeString": "int_const 224" + }, + "id": 6578, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3238", + "id": 6576, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1556:2:52", + "typeDescriptions": { + "typeIdentifier": "t_rational_28_by_1", + "typeString": "int_const 28" + }, + "value": "28" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "38", + "id": 6577, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1561:1:52", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "1556:6:52", + "typeDescriptions": { + "typeIdentifier": "t_rational_224_by_1", + "typeString": "int_const 224" + } + } + ], + "id": 6579, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1555:8:52", + "typeDescriptions": { + "typeIdentifier": "t_rational_224_by_1", + "typeString": "int_const 224" + } + }, + "src": "1526:37:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 6584, + "mutability": "constant", + "name": "_MAX_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 6763, + "src": "1569:40:52", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6582, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1569:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "38", + "id": 6583, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1608:1:52", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 6587, + "mutability": "constant", + "name": "_REWARD_DURATION", + "nodeType": "VariableDeclaration", + "scope": 6763, + "src": "1615:51:52", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6585, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1615:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 6586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1659:7:52", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6589, + "mutability": "immutable", + "name": "_authorizerAdaptor", + "nodeType": "VariableDeclaration", + "scope": 6763, + "src": "1673:55:52", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 6588, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1673:18:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6591, + "mutability": "immutable", + "name": "_gaugeFactory", + "nodeType": "VariableDeclaration", + "scope": 6763, + "src": "1734:64:52", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + }, + "typeName": { + "id": 6590, + "name": "IChildChainLiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 375, + "src": "1734:32:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 6611, + "nodeType": "Block", + "src": "1968:93:52", + "statements": [ + { + "expression": { + "id": 6605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6603, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6589, + "src": "1978:18:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6604, + "name": "authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6595, + "src": "1999:17:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "src": "1978:38:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 6606, + "nodeType": "ExpressionStatement", + "src": "1978:38:52" + }, + { + "expression": { + "id": 6609, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6607, + "name": "_gaugeFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6591, + "src": "2026:13:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6608, + "name": "gaugeFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6593, + "src": "2042:12:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "src": "2026:28:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "id": 6610, + "nodeType": "ExpressionStatement", + "src": "2026:28:52" + } + ] + }, + "id": 6612, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 6598, + "name": "authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6595, + "src": "1934:17:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 6599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getVault", + "nodeType": "MemberAccess", + "referencedDeclaration": 11, + "src": "1934:26:52", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IVault_$2288_$", + "typeString": "function () view external returns (contract IVault)" + } + }, + "id": 6600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1934:28:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + } + ], + "id": 6601, + "modifierName": { + "id": 6597, + "name": "SingletonAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "1910:23:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SingletonAuthentication_$2572_$", + "typeString": "type(contract SingletonAuthentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1910:53:52" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6593, + "mutability": "mutable", + "name": "gaugeFactory", + "nodeType": "VariableDeclaration", + "scope": 6612, + "src": "1817:45:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + }, + "typeName": { + "id": 6592, + "name": "IChildChainLiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 375, + "src": "1817:32:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6595, + "mutability": "mutable", + "name": "authorizerAdaptor", + "nodeType": "VariableDeclaration", + "scope": 6612, + "src": "1864:36:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 6594, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1864:18:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "1816:85:52" + }, + "returnParameters": { + "id": 6602, + "nodeType": "ParameterList", + "parameters": [], + "src": "1968:0:52" + }, + "scope": 6763, + "src": "1805:256:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 6620, + "nodeType": "Block", + "src": "2229:42:52", + "statements": [ + { + "expression": { + "id": 6618, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6589, + "src": "2246:18:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "functionReturnParameters": 6617, + "id": 6619, + "nodeType": "Return", + "src": "2239:25:52" + } + ] + }, + "documentation": { + "id": 6613, + "nodeType": "StructuredDocumentation", + "src": "2067:82:52", + "text": " @notice Returns the address of the Authorizer adaptor contract." + }, + "functionSelector": "e758d36b", + "id": 6621, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuthorizerAdaptor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6614, + "nodeType": "ParameterList", + "parameters": [], + "src": "2183:2:52" + }, + "returnParameters": { + "id": 6617, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6616, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6621, + "src": "2209:18:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 6615, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "2209:18:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "2208:20:52" + }, + "scope": 6763, + "src": "2154:117:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6703, + "nodeType": "Block", + "src": "2491:1083:52", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 6638, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6624, + "src": "2550:5:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + ], + "id": 6637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2542:7:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6636, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2542:7:52", + "typeDescriptions": {} + } + }, + "id": 6639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2542:14:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 6634, + "name": "_gaugeFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6591, + "src": "2509:13:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "id": 6635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "isGaugeFromFactory", + "nodeType": "MemberAccess", + "referencedDeclaration": 760, + "src": "2509:32:52", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", + "typeString": "function (address) view external returns (bool)" + } + }, + "id": 6640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2509:48:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964206761756765", + "id": 6641, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2559:15:52", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0f01a4186ff9a4f4fec3be353497709ea5e4152dad176712bbaa55bd57735b49", + "typeString": "literal_string \"Invalid gauge\"" + }, + "value": "Invalid gauge" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0f01a4186ff9a4f4fec3be353497709ea5e4152dad176712bbaa55bd57735b49", + "typeString": "literal_string \"Invalid gauge\"" + } + ], + "id": 6633, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2501:7:52", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2501:74:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6643, + "nodeType": "ExpressionStatement", + "src": "2501:74:52" + }, + { + "assignments": [ + 6645 + ], + "declarations": [ + { + "constant": false, + "id": 6645, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 6703, + "src": "2585:28:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 6644, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "2585:19:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "internal" + } + ], + "id": 6655, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 6651, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6624, + "src": "2675:5:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + ], + "id": 6650, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2667:7:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6649, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2667:7:52", + "typeDescriptions": {} + } + }, + "id": 6652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2667:14:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 6647, + "name": "_gaugeFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6591, + "src": "2636:13:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "id": 6648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getGaugeStreamer", + "nodeType": "MemberAccess", + "referencedDeclaration": 350, + "src": "2636:30:52", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", + "typeString": "function (address) view external returns (address)" + } + }, + "id": 6653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2636:46:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6646, + "name": "IChildChainStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 400, + "src": "2616:19:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IChildChainStreamer_$400_$", + "typeString": "type(contract IChildChainStreamer)" + } + }, + "id": 6654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2616:67:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2585:98:52" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "id": 6661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6657, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6645, + "src": "2701:8:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 6658, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6624, + "src": "2713:5:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + }, + "id": 6659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "reward_contract", + "nodeType": "MemberAccess", + "referencedDeclaration": 848, + "src": "2713:21:52", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IChildChainStreamer_$400_$", + "typeString": "function () view external returns (contract IChildChainStreamer)" + } + }, + "id": 6660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2713:23:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "src": "2701:35:52", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e6f74206f726967696e616c2067617567652073747265616d6572", + "id": 6662, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2738:29:52", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_009a544bc9ce778256430195eb1ba0b1d0d143ef303f6deb92a23521ff31185c", + "typeString": "literal_string \"Not original gauge streamer\"" + }, + "value": "Not original gauge streamer" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_009a544bc9ce778256430195eb1ba0b1d0d143ef303f6deb92a23521ff31185c", + "typeString": "literal_string \"Not original gauge streamer\"" + } + ], + "id": 6656, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2693:7:52", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6663, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2693:75:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6664, + "nodeType": "ExpressionStatement", + "src": "2693:75:52" + }, + { + "expression": { + "arguments": [ + { + "id": 6666, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6645, + "src": "2904:8:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + { + "id": 6667, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6626, + "src": "2914:11:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "id": 6668, + "name": "distributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6628, + "src": "2927:11:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6665, + "name": "_addTokenToStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6732, + "src": "2884:19:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IChildChainStreamer_$400_$_t_contract$_IERC20_$1650_$_t_address_$returns$__$", + "typeString": "function (contract IChildChainStreamer,contract IERC20,address)" + } + }, + "id": 6669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2884:55:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6670, + "nodeType": "ExpressionStatement", + "src": "2884:55:52" + }, + { + "assignments": [ + 6675 + ], + "declarations": [ + { + "constant": false, + "id": 6675, + "mutability": "mutable", + "name": "rewardTokens", + "nodeType": "VariableDeclaration", + "scope": 6703, + "src": "3286:39:52", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_memory_ptr", + "typeString": "contract IERC20[8]" + }, + "typeName": { + "baseType": { + "id": 6673, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "3286:6:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 6674, + "length": { + "id": 6672, + "name": "_MAX_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6584, + "src": "3293:11:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "ArrayTypeName", + "src": "3286:19:52", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_storage_ptr", + "typeString": "contract IERC20[8]" + } + }, + "visibility": "internal" + } + ], + "id": 6676, + "nodeType": "VariableDeclarationStatement", + "src": "3286:39:52" + }, + { + "body": { + "id": 6695, + "nodeType": "Block", + "src": "3373:68:52", + "statements": [ + { + "expression": { + "id": 6693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 6686, + "name": "rewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6675, + "src": "3387:12:52", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_memory_ptr", + "typeString": "contract IERC20[8] memory" + } + }, + "id": 6688, + "indexExpression": { + "id": 6687, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6678, + "src": "3400:1:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3387:15:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 6691, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6678, + "src": "3428:1:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6689, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6645, + "src": "3405:8:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "id": 6690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "reward_tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 390, + "src": "3405:22:52", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_contract$_IERC20_$1650_$", + "typeString": "function (uint256) view external returns (contract IERC20)" + } + }, + "id": 6692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3405:25:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "src": "3387:43:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 6694, + "nodeType": "ExpressionStatement", + "src": "3387:43:52" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6680, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6678, + "src": "3351:1:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 6681, + "name": "_MAX_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6584, + "src": "3355:11:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3351:15:52", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6696, + "initializationExpression": { + "assignments": [ + 6678 + ], + "declarations": [ + { + "constant": false, + "id": 6678, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 6696, + "src": "3340:9:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6677, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3340:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6679, + "nodeType": "VariableDeclarationStatement", + "src": "3340:9:52" + }, + "loopExpression": { + "expression": { + "id": 6684, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "3368:3:52", + "subExpression": { + "id": 6683, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6678, + "src": "3370:1:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6685, + "nodeType": "ExpressionStatement", + "src": "3368:3:52" + }, + "nodeType": "ForStatement", + "src": "3335:106:52" + }, + { + "expression": { + "arguments": [ + { + "id": 6698, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6624, + "src": "3537:5:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + }, + { + "id": 6699, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6645, + "src": "3544:8:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + { + "id": 6700, + "name": "rewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6675, + "src": "3554:12:52", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_memory_ptr", + "typeString": "contract IERC20[8] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + }, + { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_memory_ptr", + "typeString": "contract IERC20[8] memory" + } + ], + "id": 6697, + "name": "_updateGaugeRewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6762, + "src": "3512:24:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IRewardsOnlyGauge_$860_$_t_contract$_IChildChainStreamer_$400_$_t_array$_t_contract$_IERC20_$1650_$8_memory_ptr_$returns$__$", + "typeString": "function (contract IRewardsOnlyGauge,contract IChildChainStreamer,contract IERC20[8] memory)" + } + }, + "id": 6701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3512:55:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6702, + "nodeType": "ExpressionStatement", + "src": "3512:55:52" + } + ] + }, + "documentation": { + "id": 6622, + "nodeType": "StructuredDocumentation", + "src": "2277:66:52", + "text": " @notice Adds a new token to a RewardsOnlyGauge." + }, + "functionSelector": "d411ee4d", + "id": 6704, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 6631, + "modifierName": { + "id": 6630, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "2478:12:52", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2478:12:52" + } + ], + "name": "addTokenToGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6629, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6624, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 6704, + "src": "2382:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + }, + "typeName": { + "id": 6623, + "name": "IRewardsOnlyGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 860, + "src": "2382:17:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6626, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 6704, + "src": "2415:18:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6625, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2415:6:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6628, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 6704, + "src": "2443:19:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6627, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2443:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2372:96:52" + }, + "returnParameters": { + "id": 6632, + "nodeType": "ParameterList", + "parameters": [], + "src": "2491:0:52" + }, + "scope": 6763, + "src": "2348:1226:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6731, + "nodeType": "Block", + "src": "3718:211:52", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 6718, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6706, + "src": "3782:8:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + ], + "id": 6717, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3774:7:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6716, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3774:7:52", + "typeDescriptions": {} + } + }, + "id": 6719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3774:17:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 6722, + "name": "IChildChainStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 400, + "src": "3828:19:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IChildChainStreamer_$400_$", + "typeString": "type(contract IChildChainStreamer)" + } + }, + "id": 6723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "add_reward", + "nodeType": "MemberAccess", + "referencedDeclaration": 399, + "src": "3828:30:52", + "typeDescriptions": { + "typeIdentifier": "t_function_declaration_nonpayable$_t_contract$_IERC20_$1650_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function IChildChainStreamer.add_reward(contract IERC20,address,uint256)" + } + }, + "id": 6724, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "3828:39:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + { + "id": 6725, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6708, + "src": "3869:11:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "id": 6726, + "name": "distributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6710, + "src": "3882:11:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6727, + "name": "_REWARD_DURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6587, + "src": "3895:16:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6720, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3805:3:52", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6721, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "src": "3805:22:52", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 6728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3805:107:52", + "tryCall": false, + "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": 6713, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6589, + "src": "3728:18:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 6715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "performAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 27, + "src": "3728:32:52", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bytes memory) payable external returns (bytes memory)" + } + }, + "id": 6729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3728:194:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6730, + "nodeType": "ExpressionStatement", + "src": "3728:194:52" + } + ] + }, + "id": 6732, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addTokenToStreamer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6711, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6706, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 6732, + "src": "3618:28:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 6705, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "3618:19:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6708, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 6732, + "src": "3656:18:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6707, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "3656:6:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6710, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 6732, + "src": "3684:19:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6709, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3684:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3608:101:52" + }, + "returnParameters": { + "id": 6712, + "nodeType": "ParameterList", + "parameters": [], + "src": "3718:0:52" + }, + "scope": 6763, + "src": "3580:349:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 6761, + "nodeType": "Block", + "src": "4103:199:52", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 6748, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6734, + "src": "4167:5:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + ], + "id": 6747, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4159:7:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6746, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4159:7:52", + "typeDescriptions": {} + } + }, + "id": 6749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4159:14:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 6752, + "name": "IRewardsOnlyGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 860, + "src": "4210:17:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRewardsOnlyGauge_$860_$", + "typeString": "type(contract IRewardsOnlyGauge)" + } + }, + "id": 6753, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "set_rewards", + "nodeType": "MemberAccess", + "referencedDeclaration": 859, + "src": "4210:29:52", + "typeDescriptions": { + "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_bytes32_$_t_array$_t_address_$8_calldata_ptr_$returns$__$", + "typeString": "function IRewardsOnlyGauge.set_rewards(address,bytes32,address[8] calldata)" + } + }, + "id": 6754, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "4210:38:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + { + "id": 6755, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6736, + "src": "4250:8:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + { + "id": 6756, + "name": "_CLAIM_SIG", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6581, + "src": "4260:10:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6757, + "name": "rewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6740, + "src": "4272:12:52", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_memory_ptr", + "typeString": "contract IERC20[8] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_memory_ptr", + "typeString": "contract IERC20[8] memory" + } + ], + "expression": { + "id": 6750, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "4187:3:52", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6751, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "src": "4187:22:52", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 6758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4187:98:52", + "tryCall": false, + "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": 6743, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6589, + "src": "4113:18:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 6745, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "performAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 27, + "src": "4113:32:52", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bytes memory) payable external returns (bytes memory)" + } + }, + "id": 6759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4113:182:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 6760, + "nodeType": "ExpressionStatement", + "src": "4113:182:52" + } + ] + }, + "id": 6762, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateGaugeRewardTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6741, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6734, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 6762, + "src": "3978:23:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + }, + "typeName": { + "id": 6733, + "name": "IRewardsOnlyGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 860, + "src": "3978:17:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6736, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 6762, + "src": "4011:28:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 6735, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "4011:19:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6740, + "mutability": "mutable", + "name": "rewardTokens", + "nodeType": "VariableDeclaration", + "scope": 6762, + "src": "4049:39:52", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_memory_ptr", + "typeString": "contract IERC20[8]" + }, + "typeName": { + "baseType": { + "id": 6737, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "4049:6:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 6739, + "length": { + "id": 6738, + "name": "_MAX_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6584, + "src": "4056:11:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "ArrayTypeName", + "src": "4049:19:52", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_storage_ptr", + "typeString": "contract IERC20[8]" + } + }, + "visibility": "internal" + } + ], + "src": "3968:126:52" + }, + "returnParameters": { + "id": 6742, + "nodeType": "ParameterList", + "parameters": [], + "src": "4103:0:52" + }, + "scope": 6763, + "src": "3935:367:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 6764, + "src": "1222:3082:52" + } + ], + "src": "688:3617:52" + }, + "id": 52 + }, + "contracts/admin/DistributionScheduler.sol": { + "ast": { + "absolutePath": "contracts/admin/DistributionScheduler.sol", + "exportedSymbols": { + "DistributionScheduler": [ + 7299 + ] + }, + "id": 7300, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6765, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:53" + }, + { + "id": 6766, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:53" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol", + "id": 6767, + "nodeType": "ImportDirective", + "scope": 7300, + "sourceUnit": 827, + "src": "747:93:53", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol", + "id": 6768, + "nodeType": "ImportDirective", + "scope": 7300, + "sourceUnit": 4517, + "src": "842:79:53", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 6769, + "nodeType": "StructuredDocumentation", + "src": "960:244:53", + "text": " @title DistributionScheduler\n @notice Scheduler for setting up permissionless distributions of liquidity gauge reward tokens.\n @dev Any address may send tokens to the DistributionSchedule to be distributed among gauge depositors." + }, + "fullyImplemented": true, + "id": 7299, + "linearizedBaseContracts": [ + 7299 + ], + "name": "DistributionScheduler", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 6772, + "libraryName": { + "id": 6770, + "name": "SafeERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4516, + "src": "1248:9:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeERC20_$4516", + "typeString": "library SafeERC20" + } + }, + "nodeType": "UsingForDirective", + "src": "1242:27:53", + "typeName": { + "id": 6771, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1262:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + }, + { + "constant": true, + "id": 6775, + "mutability": "constant", + "name": "_MAX_REWARDS", + "nodeType": "VariableDeclaration", + "scope": 7299, + "src": "1275:41:53", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6773, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1275:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "38", + "id": 6774, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1315:1:53", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 6778, + "mutability": "constant", + "name": "_HEAD", + "nodeType": "VariableDeclaration", + "scope": 7299, + "src": "1442:33:53", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 6776, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1442:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "30", + "id": 6777, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1474:1:53", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 6781, + "mutability": "constant", + "name": "_NULL", + "nodeType": "VariableDeclaration", + "scope": 7299, + "src": "1481:33:53", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 6779, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1481:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "value": { + "hexValue": "30", + "id": 6780, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1513:1:53", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6787, + "mutability": "mutable", + "name": "_rewardsLists", + "nodeType": "VariableDeclaration", + "scope": 7299, + "src": "1585:71:53", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$", + "typeString": "mapping(bytes32 => mapping(uint32 => struct DistributionScheduler.RewardNode))" + }, + "typeName": { + "id": 6786, + "keyType": { + "id": 6782, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1593:7:53", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1585:49:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$", + "typeString": "mapping(bytes32 => mapping(uint32 => struct DistributionScheduler.RewardNode))" + }, + "valueType": { + "id": 6785, + "keyType": { + "id": 6783, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1612:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Mapping", + "src": "1604:29:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "valueType": { + "id": 6784, + "name": "RewardNode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6792, + "src": "1622:10:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage_ptr", + "typeString": "struct DistributionScheduler.RewardNode" + } + } + } + }, + "visibility": "private" + }, + { + "canonicalName": "DistributionScheduler.RewardNode", + "id": 6792, + "members": [ + { + "constant": false, + "id": 6789, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 6792, + "src": "1691:14:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + }, + "typeName": { + "id": 6788, + "name": "uint224", + "nodeType": "ElementaryTypeName", + "src": "1691:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6791, + "mutability": "mutable", + "name": "nextTimestamp", + "nodeType": "VariableDeclaration", + "scope": 6792, + "src": "1715:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 6790, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1715:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "name": "RewardNode", + "nodeType": "StructDefinition", + "scope": 7299, + "src": "1663:79:53", + "visibility": "public" + }, + { + "body": { + "id": 6816, + "nodeType": "Block", + "src": "2521:89:53", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 6804, + "name": "_rewardsLists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6787, + "src": "2538:13:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$", + "typeString": "mapping(bytes32 => mapping(uint32 => struct DistributionScheduler.RewardNode storage ref))" + } + }, + "id": 6809, + "indexExpression": { + "arguments": [ + { + "id": 6806, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6795, + "src": "2570:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + { + "id": 6807, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6797, + "src": "2577:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 6805, + "name": "_getRewardsListId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7110, + "src": "2552:17:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_contract$_IRewardTokenDistributor_$826_$_t_contract$_IERC20_$1650_$returns$_t_bytes32_$", + "typeString": "function (contract IRewardTokenDistributor,contract IERC20) pure returns (bytes32)" + } + }, + "id": 6808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2552:31:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2538:46:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 6814, + "indexExpression": { + "arguments": [ + { + "id": 6812, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6799, + "src": "2592:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6811, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2585:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + }, + "typeName": { + "id": 6810, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2585:6:53", + "typeDescriptions": {} + } + }, + "id": 6813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2585:17:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2538:65:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "functionReturnParameters": 6803, + "id": 6815, + "nodeType": "Return", + "src": "2531:72:53" + } + ] + }, + "documentation": { + "id": 6793, + "nodeType": "StructuredDocumentation", + "src": "1748:609:53", + "text": " @notice Returns information on the reward paid out to `gauge` in `token` over the week starting at `timestamp`\n @param gauge - The gauge which is to distribute the reward token.\n @param token - The token which is to be distributed among gauge depositors.\n @param timestamp - The timestamp corresponding to the beginning of the week being queried.\n @return - the amount of `token` which is to be distributed over the week starting at `timestamp`.\n - the timestamp of the next scheduled distribution of `token` to `gauge`. Zero if no distribution exists." + }, + "functionSelector": "80723ab3", + "id": 6817, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRewardNode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6800, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6795, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 6817, + "src": "2394:29:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + "typeName": { + "id": 6794, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "2394:23:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6797, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 6817, + "src": "2433:12:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6796, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2433:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6799, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 6817, + "src": "2455:17:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6798, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2455:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2384:94:53" + }, + "returnParameters": { + "id": 6803, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6802, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6817, + "src": "2502:17:53", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_memory_ptr", + "typeString": "struct DistributionScheduler.RewardNode" + }, + "typeName": { + "id": 6801, + "name": "RewardNode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6792, + "src": "2502:10:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage_ptr", + "typeString": "struct DistributionScheduler.RewardNode" + } + }, + "visibility": "internal" + } + ], + "src": "2501:19:53" + }, + "scope": 7299, + "src": "2362:248:53", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6834, + "nodeType": "Block", + "src": "3008:74:53", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6828, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6820, + "src": "3045:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + { + "id": 6829, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6822, + "src": "3052:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "expression": { + "id": 6830, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3059:5:53", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 6831, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3059:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6827, + "name": "getPendingRewardsAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6868, + "src": "3025:19:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IRewardTokenDistributor_$826_$_t_contract$_IERC20_$1650_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (contract IRewardTokenDistributor,contract IERC20,uint256) view returns (uint256)" + } + }, + "id": 6832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3025:50:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6826, + "id": 6833, + "nodeType": "Return", + "src": "3018:57:53" + } + ] + }, + "documentation": { + "id": 6818, + "nodeType": "StructuredDocumentation", + "src": "2616:285:53", + "text": " @notice Returns the amount of `token` which is ready to be distributed by `gauge` as of the current timestamp.\n @param gauge - The gauge which is to distribute the reward token.\n @param token - The token which is to be distributed among gauge depositors." + }, + "functionSelector": "7a27db57", + "id": 6835, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPendingRewards", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6823, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6820, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 6835, + "src": "2933:29:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + "typeName": { + "id": 6819, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "2933:23:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6822, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 6835, + "src": "2964:12:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6821, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2964:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2932:45:53" + }, + "returnParameters": { + "id": 6826, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6825, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6835, + "src": "2999:7:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6824, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2999:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2998:9:53" + }, + "scope": 7299, + "src": "2906:176:53", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 6867, + "nodeType": "Block", + "src": "3597:212:53", + "statements": [ + { + "assignments": [ + 6850 + ], + "declarations": [ + { + "constant": false, + "id": 6850, + "mutability": "mutable", + "name": "rewardsList", + "nodeType": "VariableDeclaration", + "scope": 6867, + "src": "3607:49:53", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "typeName": { + "id": 6849, + "keyType": { + "id": 6847, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "3615:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Mapping", + "src": "3607:29:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "valueType": { + "id": 6848, + "name": "RewardNode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6792, + "src": "3625:10:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage_ptr", + "typeString": "struct DistributionScheduler.RewardNode" + } + } + }, + "visibility": "internal" + } + ], + "id": 6857, + "initialValue": { + "baseExpression": { + "id": 6851, + "name": "_rewardsLists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6787, + "src": "3659:13:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$", + "typeString": "mapping(bytes32 => mapping(uint32 => struct DistributionScheduler.RewardNode storage ref))" + } + }, + "id": 6856, + "indexExpression": { + "arguments": [ + { + "id": 6853, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6838, + "src": "3691:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + { + "id": 6854, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6840, + "src": "3698:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 6852, + "name": "_getRewardsListId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7110, + "src": "3673:17:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_contract$_IRewardTokenDistributor_$826_$_t_contract$_IERC20_$1650_$returns$_t_bytes32_$", + "typeString": "function (contract IRewardTokenDistributor,contract IERC20) pure returns (bytes32)" + } + }, + "id": 6855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3673:31:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3659:46:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3607:98:53" + }, + { + "assignments": [ + null, + 6859 + ], + "declarations": [ + null, + { + "constant": false, + "id": 6859, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 6867, + "src": "3719:14:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6858, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3719:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6864, + "initialValue": { + "arguments": [ + { + "id": 6861, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6850, + "src": "3756:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + { + "id": 6862, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6842, + "src": "3769:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6860, + "name": "_getPendingRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7162, + "src": "3737:18:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$_t_uint256_$returns$_t_uint32_$_t_uint256_$", + "typeString": "function (mapping(uint32 => struct DistributionScheduler.RewardNode storage ref),uint256) view returns (uint32,uint256)" + } + }, + "id": 6863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3737:42:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint32_$_t_uint256_$", + "typeString": "tuple(uint32,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3716:63:53" + }, + { + "expression": { + "id": 6865, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6859, + "src": "3796:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6846, + "id": 6866, + "nodeType": "Return", + "src": "3789:13:53" + } + ] + }, + "documentation": { + "id": 6836, + "nodeType": "StructuredDocumentation", + "src": "3088:351:53", + "text": " @notice Returns the amount of `token` which is ready to be distributed by `gauge` as of a specified timestamp.\n @param gauge - The gauge which is to distribute the reward token.\n @param token - The token which is to be distributed among gauge depositors.\n @param timestamp - The future timestamp in which to query." + }, + "functionSelector": "e2962564", + "id": 6868, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPendingRewardsAt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6843, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6838, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 6868, + "src": "3482:29:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + "typeName": { + "id": 6837, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "3482:23:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6840, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 6868, + "src": "3521:12:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6839, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "3521:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6842, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 6868, + "src": "3543:17:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6841, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3543:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3472:94:53" + }, + "returnParameters": { + "id": 6846, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6845, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6868, + "src": "3588:7:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6844, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3588:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3587:9:53" + }, + "scope": 7299, + "src": "3444:365:53", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 6983, + "nodeType": "Block", + "src": "4659:1149:53", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6881, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6875, + "src": "4677:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 6882, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4686:1:53", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4677:10:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d7573742070726f76696465206e6f6e2d7a65726f206e756d626572206f6620746f6b656e73", + "id": 6884, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4689:40:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_62c5a219a01fd6fd6601c7927bc8316bb95af19b9dbffc136467a03aab8f6420", + "typeString": "literal_string \"Must provide non-zero number of tokens\"" + }, + "value": "Must provide non-zero number of tokens" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_62c5a219a01fd6fd6601c7927bc8316bb95af19b9dbffc136467a03aab8f6420", + "typeString": "literal_string \"Must provide non-zero number of tokens\"" + } + ], + "id": 6880, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4669:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6885, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4669:61:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6886, + "nodeType": "ExpressionStatement", + "src": "4669:61:53" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6888, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6875, + "src": "4817:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 6891, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4832:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint224_$", + "typeString": "type(uint224)" + }, + "typeName": { + "id": 6890, + "name": "uint224", + "nodeType": "ElementaryTypeName", + "src": "4832:7:53", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint224_$", + "typeString": "type(uint224)" + } + ], + "id": 6889, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "4827:4:53", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 6892, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4827:13:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint224", + "typeString": "type(uint224)" + } + }, + "id": 6893, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "4827:17:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "src": "4817:27:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "52657761726420616d6f756e74206f766572666c6f77", + "id": 6895, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4846:24:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5391fbd5d22ad37959ecf087392cb1f1bf4a2e987fe5a2e75904267b58a35e32", + "typeString": "literal_string \"Reward amount overflow\"" + }, + "value": "Reward amount overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5391fbd5d22ad37959ecf087392cb1f1bf4a2e987fe5a2e75904267b58a35e32", + "typeString": "literal_string \"Reward amount overflow\"" + } + ], + "id": 6887, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4809:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4809:62:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6897, + "nodeType": "ExpressionStatement", + "src": "4809:62:53" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6899, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6877, + "src": "4889:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 6902, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4907:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + }, + "typeName": { + "id": 6901, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "4907:6:53", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + } + ], + "id": 6900, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "4902:4:53", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 6903, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4902:12:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint32", + "typeString": "type(uint32)" + } + }, + "id": 6904, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "4902:16:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "4889:29:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5265776172642074696d657374616d70206f766572666c6f77", + "id": 6906, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4920:27:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6c0a24dc44840b730ecd436277ffffb5dfc86cd63b9062eaecde2bbcfe839e41", + "typeString": "literal_string \"Reward timestamp overflow\"" + }, + "value": "Reward timestamp overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_6c0a24dc44840b730ecd436277ffffb5dfc86cd63b9062eaecde2bbcfe839e41", + "typeString": "literal_string \"Reward timestamp overflow\"" + } + ], + "id": 6898, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4881:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4881:67:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6908, + "nodeType": "ExpressionStatement", + "src": "4881:67:53" + }, + { + "assignments": [ + 6910 + ], + "declarations": [ + { + "constant": false, + "id": 6910, + "mutability": "mutable", + "name": "rewardDistributor", + "nodeType": "VariableDeclaration", + "scope": 6983, + "src": "5050:25:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6909, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5050:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 6916, + "initialValue": { + "expression": { + "arguments": [ + { + "id": 6913, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6873, + "src": "5096:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "expression": { + "id": 6911, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6871, + "src": "5078:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "id": 6912, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "reward_data", + "nodeType": "MemberAccess", + "referencedDeclaration": 799, + "src": "5078:17:53", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_contract$_IERC20_$1650_$returns$_t_struct$_Reward_$785_memory_ptr_$", + "typeString": "function (contract IERC20) view external returns (struct IRewardTokenDistributor.Reward memory)" + } + }, + "id": 6914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5078:24:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_memory_ptr", + "typeString": "struct IRewardTokenDistributor.Reward memory" + } + }, + "id": 6915, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "distributor", + "nodeType": "MemberAccess", + "referencedDeclaration": 776, + "src": "5078:36:53", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5050:64:53" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 6923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6918, + "name": "rewardDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6910, + "src": "5132:17:53", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 6921, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5161:1:53", + "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": 6920, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5153:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6919, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5153:7:53", + "typeDescriptions": {} + } + }, + "id": 6922, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5153:10:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5132:31:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "52657761726420746f6b656e20646f6573206e6f74206578697374206f6e206761756765", + "id": 6924, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5165:38:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_12e8f0821007761081fb194dd41d74ffdd7eeefa16f56094542d3d856ddbe790", + "typeString": "literal_string \"Reward token does not exist on gauge\"" + }, + "value": "Reward token does not exist on gauge" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_12e8f0821007761081fb194dd41d74ffdd7eeefa16f56094542d3d856ddbe790", + "typeString": "literal_string \"Reward token does not exist on gauge\"" + } + ], + "id": 6917, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5124:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5124:80:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6926, + "nodeType": "ExpressionStatement", + "src": "5124:80:53" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 6933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6928, + "name": "rewardDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6910, + "src": "5222:17:53", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 6931, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "5251:4:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DistributionScheduler_$7299", + "typeString": "contract DistributionScheduler" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DistributionScheduler_$7299", + "typeString": "contract DistributionScheduler" + } + ], + "id": 6930, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5243:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6929, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5243:7:53", + "typeDescriptions": {} + } + }, + "id": 6932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5243:13:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5222:34:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "446973747269627574696f6e5363686564756c6572206973206e6f742072657761726420746f6b656e2773206469737472696275746f72", + "id": 6934, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5258:57:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e6ab3af4a4ccb1ae008e9fa0bf53f2b060c6a490ef63753643e02e0a115f2e88", + "typeString": "literal_string \"DistributionScheduler is not reward token's distributor\"" + }, + "value": "DistributionScheduler is not reward token's distributor" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e6ab3af4a4ccb1ae008e9fa0bf53f2b060c6a490ef63753643e02e0a115f2e88", + "typeString": "literal_string \"DistributionScheduler is not reward token's distributor\"" + } + ], + "id": 6927, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5214:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6935, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5214:102:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6936, + "nodeType": "ExpressionStatement", + "src": "5214:102:53" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6941, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6938, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6877, + "src": "5425:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "expression": { + "id": 6939, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5438:5:53", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 6940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "5438:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5425:28:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "446973747269627574696f6e2063616e206f6e6c79206265207363686564756c656420666f722074686520667574757265", + "id": 6942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5455:51:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dcfd3efaa3c64c8b70bacb475c6558caa225a1704322568f1406043c4e4faf9e", + "typeString": "literal_string \"Distribution can only be scheduled for the future\"" + }, + "value": "Distribution can only be scheduled for the future" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_dcfd3efaa3c64c8b70bacb475c6558caa225a1704322568f1406043c4e4faf9e", + "typeString": "literal_string \"Distribution can only be scheduled for the future\"" + } + ], + "id": 6937, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5417:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5417:90:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6944, + "nodeType": "ExpressionStatement", + "src": "5417:90:53" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6946, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6877, + "src": "5525:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 6948, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6877, + "src": "5558:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6947, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7298, + "src": "5538:19:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 6949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5538:30:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5525:43:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "446973747269627574696f6e206d7573742073746172742061742074686520626567696e6e696e67206f6620746865207765656b", + "id": 6951, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5570:54:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2c27d88d19dc31536ace48c2b93cddc882d3e6b4859319774edafcd7814ae21c", + "typeString": "literal_string \"Distribution must start at the beginning of the week\"" + }, + "value": "Distribution must start at the beginning of the week" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2c27d88d19dc31536ace48c2b93cddc882d3e6b4859319774edafcd7814ae21c", + "typeString": "literal_string \"Distribution must start at the beginning of the week\"" + } + ], + "id": 6945, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5517:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 6952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5517:108:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6953, + "nodeType": "ExpressionStatement", + "src": "5517:108:53" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 6957, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5659:3:53", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 6958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5659:10:53", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 6961, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "5679:4:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DistributionScheduler_$7299", + "typeString": "contract DistributionScheduler" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DistributionScheduler_$7299", + "typeString": "contract DistributionScheduler" + } + ], + "id": 6960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5671:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6959, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5671:7:53", + "typeDescriptions": {} + } + }, + "id": 6962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5671:13:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6963, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6875, + "src": "5686:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6954, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6873, + "src": "5636:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 6956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 4479, + "src": "5636:22:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1650_$", + "typeString": "function (contract IERC20,address,address,uint256)" + } + }, + "id": 6964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5636:57:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6965, + "nodeType": "ExpressionStatement", + "src": "5636:57:53" + }, + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 6967, + "name": "_rewardsLists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6787, + "src": "5718:13:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$", + "typeString": "mapping(bytes32 => mapping(uint32 => struct DistributionScheduler.RewardNode storage ref))" + } + }, + "id": 6972, + "indexExpression": { + "arguments": [ + { + "id": 6969, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6871, + "src": "5750:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + { + "id": 6970, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6873, + "src": "5757:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 6968, + "name": "_getRewardsListId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7110, + "src": "5732:17:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_contract$_IRewardTokenDistributor_$826_$_t_contract$_IERC20_$1650_$returns$_t_bytes32_$", + "typeString": "function (contract IRewardTokenDistributor,contract IERC20) pure returns (bytes32)" + } + }, + "id": 6971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5732:31:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5718:46:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + { + "arguments": [ + { + "id": 6975, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6877, + "src": "5773:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6974, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5766:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + }, + "typeName": { + "id": 6973, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5766:6:53", + "typeDescriptions": {} + } + }, + "id": 6976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5766:17:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "arguments": [ + { + "id": 6979, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6875, + "src": "5793:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6978, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5785:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint224_$", + "typeString": "type(uint224)" + }, + "typeName": { + "id": 6977, + "name": "uint224", + "nodeType": "ElementaryTypeName", + "src": "5785:7:53", + "typeDescriptions": {} + } + }, + "id": 6980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5785:15:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + ], + "id": 6966, + "name": "_insertReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7282, + "src": "5704:13:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$_t_uint32_$_t_uint224_$returns$__$", + "typeString": "function (mapping(uint32 => struct DistributionScheduler.RewardNode storage ref),uint32,uint224)" + } + }, + "id": 6981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5704:97:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6982, + "nodeType": "ExpressionStatement", + "src": "5704:97:53" + } + ] + }, + "documentation": { + "id": 6869, + "nodeType": "StructuredDocumentation", + "src": "3815:682:53", + "text": " @notice Schedule a distribution of tokens to gauge depositors over the span of 1 week.\n @dev All distributions must start at the beginning of a week in UNIX time, i.e. Thurs 00:00 UTC.\n This is to prevent griefing from many low value distributions having to be processed before a meaningful\n distribution can be processed.\n @param gauge - The gauge which is to distribute the reward token.\n @param token - The token which is to be distributed among gauge depositors.\n @param amount - The amount of tokens which to distribute.\n @param startTime - The timestamp at the beginning of the week over which to distribute tokens." + }, + "functionSelector": "974e98a6", + "id": 6984, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "scheduleDistribution", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6878, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6871, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 6984, + "src": "4541:29:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + "typeName": { + "id": 6870, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "4541:23:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6873, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 6984, + "src": "4580:12:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 6872, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "4580:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6875, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 6984, + "src": "4602:14:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6874, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4602:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6877, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 6984, + "src": "4626:17:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4626:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4531:118:53" + }, + "returnParameters": { + "id": 6879, + "nodeType": "ParameterList", + "parameters": [], + "src": "4659:0:53" + }, + "scope": 7299, + "src": "4502:1306:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 7037, + "nodeType": "Block", + "src": "6066:463:53", + "statements": [ + { + "body": { + "id": 7035, + "nodeType": "Block", + "src": "6119:404:53", + "statements": [ + { + "assignments": [ + 7001 + ], + "declarations": [ + { + "constant": false, + "id": 7001, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7035, + "src": "6133:12:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7000, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "6133:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "id": 7006, + "initialValue": { + "arguments": [ + { + "id": 7004, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6991, + "src": "6168:1:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7002, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6987, + "src": "6148:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "id": 7003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "reward_tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 792, + "src": "6148:19:53", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_contract$_IERC20_$1650_$", + "typeString": "function (uint256) view external returns (contract IERC20)" + } + }, + "id": 7005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6148:22:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6133:37:53" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "id": 7011, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7007, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7001, + "src": "6188:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 7009, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6204:1:53", + "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": 7008, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1650, + "src": "6197:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1650_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 7010, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6197:9:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "src": "6188:18:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7013, + "nodeType": "IfStatement", + "src": "6184:29:53", + "trueBody": { + "id": 7012, + "nodeType": "Break", + "src": "6208:5:53" + } + }, + { + "assignments": [ + 7015 + ], + "declarations": [ + { + "constant": false, + "id": 7015, + "mutability": "mutable", + "name": "rewardDistributor", + "nodeType": "VariableDeclaration", + "scope": 7035, + "src": "6323:25:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7014, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6323:7:53", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 7021, + "initialValue": { + "expression": { + "arguments": [ + { + "id": 7018, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7001, + "src": "6369:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "expression": { + "id": 7016, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6987, + "src": "6351:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "id": 7017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "reward_data", + "nodeType": "MemberAccess", + "referencedDeclaration": 799, + "src": "6351:17:53", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_contract$_IERC20_$1650_$returns$_t_struct$_Reward_$785_memory_ptr_$", + "typeString": "function (contract IERC20) view external returns (struct IRewardTokenDistributor.Reward memory)" + } + }, + "id": 7019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6351:24:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_memory_ptr", + "typeString": "struct IRewardTokenDistributor.Reward memory" + } + }, + "id": 7020, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "distributor", + "nodeType": "MemberAccess", + "referencedDeclaration": 776, + "src": "6351:36:53", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6323:64:53" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 7027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7022, + "name": "rewardDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7015, + "src": "6405:17:53", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 7025, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "6434:4:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DistributionScheduler_$7299", + "typeString": "contract DistributionScheduler" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DistributionScheduler_$7299", + "typeString": "contract DistributionScheduler" + } + ], + "id": 7024, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6426:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7023, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6426:7:53", + "typeDescriptions": {} + } + }, + "id": 7026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6426:13:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6405:34:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7034, + "nodeType": "IfStatement", + "src": "6401:112:53", + "trueBody": { + "id": 7033, + "nodeType": "Block", + "src": "6441:72:53", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7029, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6987, + "src": "6485:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + { + "id": 7030, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7001, + "src": "6492:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 7028, + "name": "startDistributionForToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7092, + "src": "6459:25:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IRewardTokenDistributor_$826_$_t_contract$_IERC20_$1650_$returns$__$", + "typeString": "function (contract IRewardTokenDistributor,contract IERC20)" + } + }, + "id": 7031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6459:39:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7032, + "nodeType": "ExpressionStatement", + "src": "6459:39:53" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6994, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6991, + "src": "6096:1:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 6995, + "name": "_MAX_REWARDS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6775, + "src": "6100:12:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6096:16:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7036, + "initializationExpression": { + "assignments": [ + 6991 + ], + "declarations": [ + { + "constant": false, + "id": 6991, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 7036, + "src": "6081:9:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6990, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6081:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6993, + "initialValue": { + "hexValue": "30", + "id": 6992, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6093:1:53", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6081:13:53" + }, + "loopExpression": { + "expression": { + "id": 6998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "6114:3:53", + "subExpression": { + "id": 6997, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6991, + "src": "6116:1:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6999, + "nodeType": "ExpressionStatement", + "src": "6114:3:53" + }, + "nodeType": "ForStatement", + "src": "6076:447:53" + } + ] + }, + "documentation": { + "id": 6985, + "nodeType": "StructuredDocumentation", + "src": "5814:179:53", + "text": " @notice Process all pending distributions for a gauge to start distributing the tokens.\n @param gauge - The gauge which is to distribute the reward token." + }, + "functionSelector": "0089fac3", + "id": 7038, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "startDistributions", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6987, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 7038, + "src": "6026:29:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + "typeName": { + "id": 6986, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "6026:23:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "visibility": "internal" + } + ], + "src": "6025:31:53" + }, + "returnParameters": { + "id": 6989, + "nodeType": "ParameterList", + "parameters": [], + "src": "6066:0:53" + }, + "scope": 7299, + "src": "5998:531:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 7091, + "nodeType": "Block", + "src": "6903:550:53", + "statements": [ + { + "assignments": [ + 7049 + ], + "declarations": [ + { + "constant": false, + "id": 7049, + "mutability": "mutable", + "name": "rewardsList", + "nodeType": "VariableDeclaration", + "scope": 7091, + "src": "6913:49:53", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "typeName": { + "id": 7048, + "keyType": { + "id": 7046, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "6921:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Mapping", + "src": "6913:29:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "valueType": { + "id": 7047, + "name": "RewardNode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6792, + "src": "6931:10:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage_ptr", + "typeString": "struct DistributionScheduler.RewardNode" + } + } + }, + "visibility": "internal" + } + ], + "id": 7056, + "initialValue": { + "baseExpression": { + "id": 7050, + "name": "_rewardsLists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6787, + "src": "6965:13:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$", + "typeString": "mapping(bytes32 => mapping(uint32 => struct DistributionScheduler.RewardNode storage ref))" + } + }, + "id": 7055, + "indexExpression": { + "arguments": [ + { + "id": 7052, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7041, + "src": "6997:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + { + "id": 7053, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7043, + "src": "7004:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 7051, + "name": "_getRewardsListId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7110, + "src": "6979:17:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_contract$_IRewardTokenDistributor_$826_$_t_contract$_IERC20_$1650_$returns$_t_bytes32_$", + "typeString": "function (contract IRewardTokenDistributor,contract IERC20) pure returns (bytes32)" + } + }, + "id": 7054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6979:31:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6965:46:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6913:98:53" + }, + { + "assignments": [ + 7058, + 7060 + ], + "declarations": [ + { + "constant": false, + "id": 7058, + "mutability": "mutable", + "name": "firstUnprocessedNodeKey", + "nodeType": "VariableDeclaration", + "scope": 7091, + "src": "7023:30:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 7057, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "7023:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7060, + "mutability": "mutable", + "name": "rewardAmount", + "nodeType": "VariableDeclaration", + "scope": 7091, + "src": "7055:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7059, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7055:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7066, + "initialValue": { + "arguments": [ + { + "id": 7062, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7049, + "src": "7098:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + { + "expression": { + "id": 7063, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "7111:5:53", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 7064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "7111:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7061, + "name": "_getPendingRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7162, + "src": "7079:18:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$_$_t_uint256_$returns$_t_uint32_$_t_uint256_$", + "typeString": "function (mapping(uint32 => struct DistributionScheduler.RewardNode storage ref),uint256) view returns (uint32,uint256)" + } + }, + "id": 7065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7079:48:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint32_$_t_uint256_$", + "typeString": "tuple(uint32,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7022:105:53" + }, + { + "expression": { + "id": 7072, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 7067, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7049, + "src": "7277:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7069, + "indexExpression": { + "id": 7068, + "name": "_HEAD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6778, + "src": "7289:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7277:18:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7070, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "nextTimestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6791, + "src": "7277:32:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7071, + "name": "firstUnprocessedNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7058, + "src": "7312:23:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "7277:58:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 7073, + "nodeType": "ExpressionStatement", + "src": "7277:58:53" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 7079, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7041, + "src": "7368:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + ], + "id": 7078, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7360:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7077, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7360:7:53", + "typeDescriptions": {} + } + }, + "id": 7080, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7360:14:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 7081, + "name": "rewardAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7060, + "src": "7376:12:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7074, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7043, + "src": "7346:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 7076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1619, + "src": "7346:13:53", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 7082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7346:43:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7083, + "nodeType": "ExpressionStatement", + "src": "7346:43:53" + }, + { + "expression": { + "arguments": [ + { + "id": 7087, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7043, + "src": "7426:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "id": 7088, + "name": "rewardAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7060, + "src": "7433:12:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7084, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7041, + "src": "7399:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "id": 7086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit_reward_token", + "nodeType": "MemberAccess", + "referencedDeclaration": 825, + "src": "7399:26:53", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$1650_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,uint256) external" + } + }, + "id": 7089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7399:47:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7090, + "nodeType": "ExpressionStatement", + "src": "7399:47:53" + } + ] + }, + "documentation": { + "id": 7039, + "nodeType": "StructuredDocumentation", + "src": "6535:276:53", + "text": " @notice Process all pending distributions for a given token for a gauge to start distributing tokens.\n @param gauge - The gauge which is to distribute the reward token.\n @param token - The token which is to be distributed among gauge depositors." + }, + "functionSelector": "d85b7a61", + "id": 7092, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "startDistributionForToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7044, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7041, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 7092, + "src": "6851:29:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + "typeName": { + "id": 7040, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "6851:23:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7043, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7092, + "src": "6882:12:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7042, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "6882:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "6850:45:53" + }, + "returnParameters": { + "id": 7045, + "nodeType": "ParameterList", + "parameters": [], + "src": "6903:0:53" + }, + "scope": 7299, + "src": "6816:637:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 7109, + "nodeType": "Block", + "src": "7596:71:53", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 7104, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7094, + "src": "7640:5:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + { + "id": 7105, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7096, + "src": "7647:11:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "expression": { + "id": 7102, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "7623:3:53", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 7103, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "7623:16:53", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 7106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7623:36:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 7101, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "7613:9:53", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 7107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7613:47:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 7100, + "id": 7108, + "nodeType": "Return", + "src": "7606:54:53" + } + ] + }, + "id": 7110, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getRewardsListId", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7094, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 7110, + "src": "7513:29:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + }, + "typeName": { + "id": 7093, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "7513:23:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7096, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 7110, + "src": "7544:18:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7095, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "7544:6:53", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "7512:51:53" + }, + "returnParameters": { + "id": 7100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7099, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7110, + "src": "7587:7:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 7098, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7587:7:53", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7586:9:53" + }, + "scope": 7299, + "src": "7486:181:53", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7161, + "nodeType": "Block", + "src": "8132:450:53", + "statements": [ + { + "assignments": [ + 7125 + ], + "declarations": [ + { + "constant": false, + "id": 7125, + "mutability": "mutable", + "name": "currentNodeKey", + "nodeType": "VariableDeclaration", + "scope": 7161, + "src": "8142:21:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 7124, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8142:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 7130, + "initialValue": { + "expression": { + "baseExpression": { + "id": 7126, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7115, + "src": "8166:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7128, + "indexExpression": { + "id": 7127, + "name": "_HEAD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6778, + "src": "8178:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8166:18:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7129, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "nextTimestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6791, + "src": "8166:32:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8142:56:53" + }, + { + "assignments": [ + 7132 + ], + "declarations": [ + { + "constant": false, + "id": 7132, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 7161, + "src": "8305:14:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8305:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7133, + "nodeType": "VariableDeclarationStatement", + "src": "8305:14:53" + }, + { + "body": { + "id": 7155, + "nodeType": "Block", + "src": "8392:142:53", + "statements": [ + { + "expression": { + "id": 7146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7141, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7132, + "src": "8406:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "expression": { + "baseExpression": { + "id": 7142, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7115, + "src": "8416:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7144, + "indexExpression": { + "id": 7143, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7125, + "src": "8428:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8416:27:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7145, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 6789, + "src": "8416:34:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "src": "8406:44:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7147, + "nodeType": "ExpressionStatement", + "src": "8406:44:53" + }, + { + "expression": { + "id": 7153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7148, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7125, + "src": "8465:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "baseExpression": { + "id": 7149, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7115, + "src": "8482:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7151, + "indexExpression": { + "id": 7150, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7125, + "src": "8494:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8482:27:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7152, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "nextTimestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6791, + "src": "8482:41:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "8465:58:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 7154, + "nodeType": "ExpressionStatement", + "src": "8465:58:53" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7134, + "name": "targetKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7117, + "src": "8336:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7135, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7125, + "src": "8349:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "8336:27:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 7139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7137, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7125, + "src": "8367:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 7138, + "name": "_NULL", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6781, + "src": "8385:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "8367:23:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8336:54:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7156, + "nodeType": "WhileStatement", + "src": "8329:205:53" + }, + { + "expression": { + "components": [ + { + "id": 7157, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7125, + "src": "8552:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + { + "id": 7158, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7132, + "src": "8568:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7159, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8551:24:53", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint32_$_t_uint256_$", + "typeString": "tuple(uint32,uint256)" + } + }, + "functionReturnParameters": 7123, + "id": 7160, + "nodeType": "Return", + "src": "8544:31:53" + } + ] + }, + "documentation": { + "id": 7111, + "nodeType": "StructuredDocumentation", + "src": "7673:288:53", + "text": " @dev Sums the rewards held on all pending reward nodes with a key lesser than `targetKey`.\n @return - the key corresponding to the first node with a key greater than `targetKey`.\n - the cumulative rewards held on all pending nodes before `targetKey`" + }, + "id": 7162, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getPendingRewards", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7118, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7115, + "mutability": "mutable", + "name": "rewardsList", + "nodeType": "VariableDeclaration", + "scope": 7162, + "src": "7994:49:53", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "typeName": { + "id": 7114, + "keyType": { + "id": 7112, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8002:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Mapping", + "src": "7994:29:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "valueType": { + "id": 7113, + "name": "RewardNode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6792, + "src": "8012:10:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage_ptr", + "typeString": "struct DistributionScheduler.RewardNode" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7117, + "mutability": "mutable", + "name": "targetKey", + "nodeType": "VariableDeclaration", + "scope": 7162, + "src": "8045:17:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7116, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8045:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7993:70:53" + }, + "returnParameters": { + "id": 7123, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7120, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7162, + "src": "8111:6:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 7119, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8111:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7122, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7162, + "src": "8119:7:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7121, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8119:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8110:17:53" + }, + "scope": 7299, + "src": "7966:616:53", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7281, + "nodeType": "Block", + "src": "8846:1659:53", + "statements": [ + { + "assignments": [ + 7175 + ], + "declarations": [ + { + "constant": false, + "id": 7175, + "mutability": "mutable", + "name": "currentNodeKey", + "nodeType": "VariableDeclaration", + "scope": 7281, + "src": "8977:21:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 7174, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8977:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 7177, + "initialValue": { + "id": 7176, + "name": "_HEAD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6778, + "src": "9001:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8977:29:53" + }, + { + "assignments": [ + 7179 + ], + "declarations": [ + { + "constant": false, + "id": 7179, + "mutability": "mutable", + "name": "nextNodeKey", + "nodeType": "VariableDeclaration", + "scope": 7281, + "src": "9016:18:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 7178, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "9016:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 7184, + "initialValue": { + "expression": { + "baseExpression": { + "id": 7180, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "9037:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7182, + "indexExpression": { + "id": 7181, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7175, + "src": "9049:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9037:27:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7183, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "nextTimestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6791, + "src": "9037:41:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9016:62:53" + }, + { + "body": { + "id": 7203, + "nodeType": "Block", + "src": "9297:122:53", + "statements": [ + { + "expression": { + "id": 7194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7192, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7175, + "src": "9311:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7193, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "9328:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9311:28:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 7195, + "nodeType": "ExpressionStatement", + "src": "9311:28:53" + }, + { + "expression": { + "id": 7201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7196, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "9353:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "baseExpression": { + "id": 7197, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "9367:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7199, + "indexExpression": { + "id": 7198, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7175, + "src": "9379:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9367:27:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7200, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "nextTimestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6791, + "src": "9367:41:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9353:55:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 7202, + "nodeType": "ExpressionStatement", + "src": "9353:55:53" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 7187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7185, + "name": "insertedNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7169, + "src": "9242:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 7186, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "9260:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9242:29:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 7190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7188, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "9275:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 7189, + "name": "_NULL", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6781, + "src": "9290:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9275:20:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9242:53:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7204, + "nodeType": "WhileStatement", + "src": "9235:184:53" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 7207, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7205, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "9433:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7206, + "name": "_NULL", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6781, + "src": "9448:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9433:20:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "id": 7227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7225, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "9702:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7226, + "name": "insertedNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7169, + "src": "9717:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9702:30:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7278, + "nodeType": "Block", + "src": "10128:371:53", + "statements": [ + { + "expression": { + "id": 7269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 7262, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "10353:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7264, + "indexExpression": { + "id": 7263, + "name": "insertedNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7169, + "src": "10365:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10353:28:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 7266, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7171, + "src": "10395:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + { + "id": 7267, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "10403:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 7265, + "name": "RewardNode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6792, + "src": "10384:10:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RewardNode_$6792_storage_ptr_$", + "typeString": "type(struct DistributionScheduler.RewardNode storage pointer)" + } + }, + "id": 7268, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10384:31:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_memory_ptr", + "typeString": "struct DistributionScheduler.RewardNode memory" + } + }, + "src": "10353:62:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7270, + "nodeType": "ExpressionStatement", + "src": "10353:62:53" + }, + { + "expression": { + "id": 7276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 7271, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "10429:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7273, + "indexExpression": { + "id": 7272, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7175, + "src": "10441:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10429:27:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7274, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "nextTimestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6791, + "src": "10429:41:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7275, + "name": "insertedNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7169, + "src": "10473:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "10429:59:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 7277, + "nodeType": "ExpressionStatement", + "src": "10429:59:53" + } + ] + }, + "id": 7279, + "nodeType": "IfStatement", + "src": "9698:801:53", + "trueBody": { + "id": 7261, + "nodeType": "Block", + "src": "9734:388:53", + "statements": [ + { + "assignments": [ + 7229 + ], + "declarations": [ + { + "constant": false, + "id": 7229, + "mutability": "mutable", + "name": "rewardAmount", + "nodeType": "VariableDeclaration", + "scope": 7261, + "src": "9888:20:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7228, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9888:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7239, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 7232, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "9919:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7234, + "indexExpression": { + "id": 7233, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "9931:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9919:24:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7235, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 6789, + "src": "9919:31:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + ], + "id": 7231, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9911:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7230, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9911:7:53", + "typeDescriptions": {} + } + }, + "id": 7236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9911:40:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 7237, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7171, + "src": "9954:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "src": "9911:49:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9888:72:53" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7241, + "name": "rewardAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7229, + "src": "9982:12:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 7244, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10003:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint224_$", + "typeString": "type(uint224)" + }, + "typeName": { + "id": 7243, + "name": "uint224", + "nodeType": "ElementaryTypeName", + "src": "10003:7:53", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint224_$", + "typeString": "type(uint224)" + } + ], + "id": 7242, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "9998:4:53", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 7245, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9998:13:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint224", + "typeString": "type(uint224)" + } + }, + "id": 7246, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "9998:17:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "src": "9982:33:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "52657761726420616d6f756e74206f766572666c6f77", + "id": 7248, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10017:24:53", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5391fbd5d22ad37959ecf087392cb1f1bf4a2e987fe5a2e75904267b58a35e32", + "typeString": "literal_string \"Reward amount overflow\"" + }, + "value": "Reward amount overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5391fbd5d22ad37959ecf087392cb1f1bf4a2e987fe5a2e75904267b58a35e32", + "typeString": "literal_string \"Reward amount overflow\"" + } + ], + "id": 7240, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "9974:7:53", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9974:68:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7250, + "nodeType": "ExpressionStatement", + "src": "9974:68:53" + }, + { + "expression": { + "id": 7259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 7251, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "10056:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7253, + "indexExpression": { + "id": 7252, + "name": "nextNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7179, + "src": "10068:11:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10056:24:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7254, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 6789, + "src": "10056:31:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 7257, + "name": "rewardAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7229, + "src": "10098:12:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7256, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10090:7:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint224_$", + "typeString": "type(uint224)" + }, + "typeName": { + "id": 7255, + "name": "uint224", + "nodeType": "ElementaryTypeName", + "src": "10090:7:53", + "typeDescriptions": {} + } + }, + "id": 7258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10090:21:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "src": "10056:55:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "id": 7260, + "nodeType": "ExpressionStatement", + "src": "10056:55:53" + } + ] + } + }, + "id": 7280, + "nodeType": "IfStatement", + "src": "9429:1070:53", + "trueBody": { + "id": 7224, + "nodeType": "Block", + "src": "9455:237:53", + "statements": [ + { + "expression": { + "id": 7213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 7208, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "9552:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7210, + "indexExpression": { + "id": 7209, + "name": "currentNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7175, + "src": "9564:14:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9552:27:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7211, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "nextTimestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6791, + "src": "9552:41:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7212, + "name": "insertedNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7169, + "src": "9596:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "src": "9552:59:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "id": 7214, + "nodeType": "ExpressionStatement", + "src": "9552:59:53" + }, + { + "expression": { + "id": 7222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 7215, + "name": "rewardsList", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7167, + "src": "9625:11:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode storage ref)" + } + }, + "id": 7217, + "indexExpression": { + "id": 7216, + "name": "insertedNodeKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7169, + "src": "9637:15:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9625:28:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 7219, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7171, + "src": "9667:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + { + "id": 7220, + "name": "_NULL", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6781, + "src": "9675:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + }, + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 7218, + "name": "RewardNode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6792, + "src": "9656:10:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RewardNode_$6792_storage_ptr_$", + "typeString": "type(struct DistributionScheduler.RewardNode storage pointer)" + } + }, + "id": 7221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9656:25:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_memory_ptr", + "typeString": "struct DistributionScheduler.RewardNode memory" + } + }, + "src": "9625:56:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage", + "typeString": "struct DistributionScheduler.RewardNode storage ref" + } + }, + "id": 7223, + "nodeType": "ExpressionStatement", + "src": "9625:56:53" + } + ] + } + } + ] + }, + "documentation": { + "id": 7163, + "nodeType": "StructuredDocumentation", + "src": "8588:101:53", + "text": " @dev Find the position of the new node in the list of pending nodes and insert it." + }, + "id": 7282, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_insertReward", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7167, + "mutability": "mutable", + "name": "rewardsList", + "nodeType": "VariableDeclaration", + "scope": 7282, + "src": "8726:49:53", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "typeName": { + "id": 7166, + "keyType": { + "id": 7164, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8734:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "Mapping", + "src": "8726:29:53", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_RewardNode_$6792_storage_$", + "typeString": "mapping(uint32 => struct DistributionScheduler.RewardNode)" + }, + "valueType": { + "id": 7165, + "name": "RewardNode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6792, + "src": "8744:10:53", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RewardNode_$6792_storage_ptr", + "typeString": "struct DistributionScheduler.RewardNode" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7169, + "mutability": "mutable", + "name": "insertedNodeKey", + "nodeType": "VariableDeclaration", + "scope": 7282, + "src": "8785:22:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 7168, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "8785:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7171, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 7282, + "src": "8817:14:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + }, + "typeName": { + "id": 7170, + "name": "uint224", + "nodeType": "ElementaryTypeName", + "src": "8817:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint224", + "typeString": "uint224" + } + }, + "visibility": "internal" + } + ], + "src": "8716:121:53" + }, + "returnParameters": { + "id": 7173, + "nodeType": "ParameterList", + "parameters": [], + "src": "8846:0:53" + }, + "scope": 7299, + "src": "8694:1811:53", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 7297, + "nodeType": "Block", + "src": "10709:55:53", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7290, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7285, + "src": "10727:9:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "31", + "id": 7291, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10739:7:53", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "10727:19:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7293, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10726:21:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "31", + "id": 7294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10750:7:53", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "10726:31:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7289, + "id": 7296, + "nodeType": "Return", + "src": "10719:38:53" + } + ] + }, + "documentation": { + "id": 7283, + "nodeType": "StructuredDocumentation", + "src": "10511:114:53", + "text": " @dev Rounds the provided timestamp down to the beginning of the previous week (Thurs 00:00 UTC)" + }, + "id": 7298, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_roundDownTimestamp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7286, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7285, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 7298, + "src": "10659:17:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7284, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10659:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10658:19:53" + }, + "returnParameters": { + "id": 7289, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7288, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7298, + "src": "10700:7:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7287, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10700:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10699:9:53" + }, + "scope": 7299, + "src": "10630:134:53", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 7300, + "src": "1205:9561:53" + } + ], + "src": "688:10079:53" + }, + "id": 53 + }, + "contracts/admin/GaugeAdder.sol": { + "ast": { + "absolutePath": "contracts/admin/GaugeAdder.sol", + "exportedSymbols": { + "GaugeAdder": [ + 7653 + ] + }, + "id": 7654, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 7301, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:54" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol", + "id": 7302, + "nodeType": "ImportDirective", + "scope": 7654, + "sourceUnit": 653, + "src": "713:81:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol", + "id": 7303, + "nodeType": "ImportDirective", + "scope": 7654, + "sourceUnit": 956, + "src": "795:92:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 7304, + "nodeType": "ImportDirective", + "scope": 7654, + "sourceUnit": 2289, + "src": "888:65:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "id": 7305, + "nodeType": "ImportDirective", + "scope": 7654, + "sourceUnit": 2573, + "src": "955:88:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "id": 7306, + "nodeType": "ImportDirective", + "scope": 7654, + "sourceUnit": 4422, + "src": "1044:85:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol", + "id": 7307, + "nodeType": "ImportDirective", + "scope": 7654, + "sourceUnit": 4366, + "src": "1130:83:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "id": 7308, + "nodeType": "ImportDirective", + "scope": 7654, + "sourceUnit": 2366, + "src": "1214:79:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 7309, + "name": "IGaugeAdder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 652, + "src": "1318:11:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeAdder_$652", + "typeString": "contract IGaugeAdder" + } + }, + "id": 7310, + "nodeType": "InheritanceSpecifier", + "src": "1318:11:54" + }, + { + "baseName": { + "id": 7311, + "name": "SingletonAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2572, + "src": "1331:23:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + }, + "id": 7312, + "nodeType": "InheritanceSpecifier", + "src": "1331:23:54" + }, + { + "baseName": { + "id": 7313, + "name": "ReentrancyGuard", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4421, + "src": "1356:15:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ReentrancyGuard_$4421", + "typeString": "contract ReentrancyGuard" + } + }, + "id": 7314, + "nodeType": "InheritanceSpecifier", + "src": "1356:15:54" + } + ], + "contractDependencies": [ + 652, + 1520, + 2365, + 2572, + 4421 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 7653, + "linearizedBaseContracts": [ + 7653, + 4421, + 2572, + 2365, + 652, + 1520 + ], + "name": "GaugeAdder", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 7317, + "libraryName": { + "id": 7315, + "name": "EnumerableSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4365, + "src": "1384:13:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EnumerableSet_$4365", + "typeString": "library EnumerableSet" + } + }, + "nodeType": "UsingForDirective", + "src": "1378:49:54", + "typeName": { + "id": 7316, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "1402:24:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + } + }, + { + "constant": false, + "id": 7319, + "mutability": "immutable", + "name": "_gaugeController", + "nodeType": "VariableDeclaration", + "scope": 7653, + "src": "1433:51:54", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 7318, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "1433:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7321, + "mutability": "mutable", + "name": "_authorizerAdaptor", + "nodeType": "VariableDeclaration", + "scope": 7653, + "src": "1490:45:54", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 7320, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1490:18:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7325, + "mutability": "mutable", + "name": "_gaugeFactoriesByType", + "nodeType": "VariableDeclaration", + "scope": 7653, + "src": "1631:77:54", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_GaugeType_$577_$_t_struct$_AddressSet_$3924_storage_$", + "typeString": "mapping(enum IGaugeAdder.GaugeType => struct EnumerableSet.AddressSet)" + }, + "typeName": { + "id": 7324, + "keyType": { + "id": 7322, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "1639:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "nodeType": "Mapping", + "src": "1631:46:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_GaugeType_$577_$_t_struct$_AddressSet_$3924_storage_$", + "typeString": "mapping(enum IGaugeAdder.GaugeType => struct EnumerableSet.AddressSet)" + }, + "valueType": { + "id": 7323, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "1652:24:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7329, + "mutability": "mutable", + "name": "_poolGauge", + "nodeType": "VariableDeclaration", + "scope": 7653, + "src": "1818:54:54", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "mapping(contract IERC20 => contract ILiquidityGauge)" + }, + "typeName": { + "id": 7328, + "keyType": { + "id": 7326, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1826:6:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Mapping", + "src": "1818:34:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "mapping(contract IERC20 => contract ILiquidityGauge)" + }, + "valueType": { + "id": 7327, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1836:15:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + } + }, + "visibility": "internal" + }, + { + "body": { + "id": 7351, + "nodeType": "Block", + "src": "1985:105:54", + "statements": [ + { + "expression": { + "id": 7343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7341, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7319, + "src": "1995:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7342, + "name": "gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7331, + "src": "2014:15:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "src": "1995:34:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 7344, + "nodeType": "ExpressionStatement", + "src": "1995:34:54" + }, + { + "expression": { + "id": 7349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7345, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7321, + "src": "2039:18:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 7346, + "name": "gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7331, + "src": "2060:15:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 7347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "admin", + "nodeType": "MemberAccess", + "referencedDeclaration": 719, + "src": "2060:21:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizerAdaptor_$28_$", + "typeString": "function () view external returns (contract IAuthorizerAdaptor)" + } + }, + "id": 7348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2060:23:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "src": "2039:44:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 7350, + "nodeType": "ExpressionStatement", + "src": "2039:44:54" + } + ] + }, + "id": 7352, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 7334, + "name": "gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7331, + "src": "1949:15:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 7335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "admin", + "nodeType": "MemberAccess", + "referencedDeclaration": 719, + "src": "1949:21:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizerAdaptor_$28_$", + "typeString": "function () view external returns (contract IAuthorizerAdaptor)" + } + }, + "id": 7336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1949:23:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 7337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getVault", + "nodeType": "MemberAccess", + "referencedDeclaration": 11, + "src": "1949:32:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IVault_$2288_$", + "typeString": "function () view external returns (contract IVault)" + } + }, + "id": 7338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1949:34:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + } + ], + "id": 7339, + "modifierName": { + "id": 7333, + "name": "SingletonAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "1925:23:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SingletonAuthentication_$2572_$", + "typeString": "type(contract SingletonAuthentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1925:59:54" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7332, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7331, + "mutability": "mutable", + "name": "gaugeController", + "nodeType": "VariableDeclaration", + "scope": 7352, + "src": "1891:32:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 7330, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "1891:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "internal" + } + ], + "src": "1890:34:54" + }, + "returnParameters": { + "id": 7340, + "nodeType": "ParameterList", + "parameters": [], + "src": "1985:0:54" + }, + "scope": 7653, + "src": "1879:211:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 7360, + "nodeType": "Block", + "src": "2258:42:54", + "statements": [ + { + "expression": { + "id": 7358, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7321, + "src": "2275:18:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "functionReturnParameters": 7357, + "id": 7359, + "nodeType": "Return", + "src": "2268:25:54" + } + ] + }, + "documentation": { + "id": 7353, + "nodeType": "StructuredDocumentation", + "src": "2096:82:54", + "text": " @notice Returns the address of the Authorizer adaptor contract." + }, + "functionSelector": "e758d36b", + "id": 7361, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuthorizerAdaptor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7354, + "nodeType": "ParameterList", + "parameters": [], + "src": "2212:2:54" + }, + "returnParameters": { + "id": 7357, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7356, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7361, + "src": "2238:18:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 7355, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "2238:18:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "2237:20:54" + }, + "scope": 7653, + "src": "2183:117:54", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 589 + ], + "body": { + "id": 7370, + "nodeType": "Block", + "src": "2461:40:54", + "statements": [ + { + "expression": { + "id": 7368, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7319, + "src": "2478:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "functionReturnParameters": 7367, + "id": 7369, + "nodeType": "Return", + "src": "2471:23:54" + } + ] + }, + "documentation": { + "id": 7362, + "nodeType": "StructuredDocumentation", + "src": "2306:70:54", + "text": " @notice Returns the address of the Gauge Controller" + }, + "functionSelector": "58de9ade", + "id": 7371, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeController", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7364, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2425:8:54" + }, + "parameters": { + "id": 7363, + "nodeType": "ParameterList", + "parameters": [], + "src": "2408:2:54" + }, + "returnParameters": { + "id": 7367, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7366, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7371, + "src": "2443:16:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 7365, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "2443:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "internal" + } + ], + "src": "2442:18:54" + }, + "scope": 7653, + "src": "2381:120:54", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 597 + ], + "body": { + "id": 7384, + "nodeType": "Block", + "src": "3069:40:54", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 7380, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7329, + "src": "3086:10:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "mapping(contract IERC20 => contract ILiquidityGauge)" + } + }, + "id": 7382, + "indexExpression": { + "id": 7381, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7374, + "src": "3097:4:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3086:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 7379, + "id": 7383, + "nodeType": "Return", + "src": "3079:23:54" + } + ] + }, + "documentation": { + "id": 7372, + "nodeType": "StructuredDocumentation", + "src": "2507:473:54", + "text": " @notice Returns the gauge corresponding to a Balancer pool `pool` on Ethereum mainnet.\n Only returns gauges which have been added to the Gauge Controller.\n @dev Gauge Factories also implement a `getPoolGauge` function which maps pools to gauges which it has deployed.\n This function provides global information by using which gauge has been added to the Gauge Controller\n to represent the canonical gauge for a given pool address." + }, + "functionSelector": "a8ea6875", + "id": 7385, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPoolGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7376, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3034:8:54" + }, + "parameters": { + "id": 7375, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7374, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 7385, + "src": "3007:11:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7373, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "3007:6:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "3006:13:54" + }, + "returnParameters": { + "id": 7379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7378, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7385, + "src": "3052:15:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 7377, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "3052:15:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "3051:17:54" + }, + "scope": 7653, + "src": "2985:124:54", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 607 + ], + "body": { + "id": 7403, + "nodeType": "Block", + "src": "3313:66:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7400, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7390, + "src": "3366:5:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 7396, + "name": "_gaugeFactoriesByType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7325, + "src": "3330:21:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_GaugeType_$577_$_t_struct$_AddressSet_$3924_storage_$", + "typeString": "mapping(enum IGaugeAdder.GaugeType => struct EnumerableSet.AddressSet storage ref)" + } + }, + "id": 7398, + "indexExpression": { + "id": 7397, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7388, + "src": "3352:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3330:32:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 7399, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "at", + "nodeType": "MemberAccess", + "referencedDeclaration": 4107, + "src": "3330:35:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)" + } + }, + "id": 7401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3330:42:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 7395, + "id": 7402, + "nodeType": "Return", + "src": "3323:49:54" + } + ] + }, + "documentation": { + "id": 7386, + "nodeType": "StructuredDocumentation", + "src": "3115:84:54", + "text": " @notice Returns the `index`'th factory for gauge type `gaugeType`" + }, + "functionSelector": "52854ed7", + "id": 7404, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getFactoryForGaugeType", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7392, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3286:8:54" + }, + "parameters": { + "id": 7391, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7388, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 7404, + "src": "3236:19:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 7387, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "3236:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7390, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 7404, + "src": "3257:13:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7389, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3257:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3235:36:54" + }, + "returnParameters": { + "id": 7395, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7394, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7404, + "src": "3304:7:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7393, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3304:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3303:9:54" + }, + "scope": 7653, + "src": "3204:175:54", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 615 + ], + "body": { + "id": 7419, + "nodeType": "Block", + "src": "3574:65:54", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "baseExpression": { + "id": 7413, + "name": "_gaugeFactoriesByType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7325, + "src": "3591:21:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_GaugeType_$577_$_t_struct$_AddressSet_$3924_storage_$", + "typeString": "mapping(enum IGaugeAdder.GaugeType => struct EnumerableSet.AddressSet storage ref)" + } + }, + "id": 7415, + "indexExpression": { + "id": 7414, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7407, + "src": "3613:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3591:32:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 7416, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": 4081, + "src": "3591:39:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)" + } + }, + "id": 7417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3591:41:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7412, + "id": 7418, + "nodeType": "Return", + "src": "3584:48:54" + } + ] + }, + "documentation": { + "id": 7405, + "nodeType": "StructuredDocumentation", + "src": "3385:85:54", + "text": " @notice Returns the number of factories for gauge type `gaugeType`" + }, + "functionSelector": "f3d8b4cf", + "id": 7420, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getFactoryForGaugeTypeCount", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7409, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3547:8:54" + }, + "parameters": { + "id": 7408, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7407, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 7420, + "src": "3512:19:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 7406, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "3512:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + } + ], + "src": "3511:21:54" + }, + "returnParameters": { + "id": 7412, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7411, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7420, + "src": "3565:7:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7410, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3565:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3564:9:54" + }, + "scope": 7653, + "src": "3475:164:54", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 625 + ], + "body": { + "id": 7471, + "nodeType": "Block", + "src": "3885:544:54", + "statements": [ + { + "assignments": [ + 7434 + ], + "declarations": [ + { + "constant": false, + "id": 7434, + "mutability": "mutable", + "name": "gaugeFactories", + "nodeType": "VariableDeclaration", + "scope": 7471, + "src": "3895:47:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 7433, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "3895:24:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + } + ], + "id": 7438, + "initialValue": { + "baseExpression": { + "id": 7435, + "name": "_gaugeFactoriesByType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7325, + "src": "3945:21:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_GaugeType_$577_$_t_struct$_AddressSet_$3924_storage_$", + "typeString": "mapping(enum IGaugeAdder.GaugeType => struct EnumerableSet.AddressSet storage ref)" + } + }, + "id": 7437, + "indexExpression": { + "id": 7436, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7425, + "src": "3967:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3945:32:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3895:82:54" + }, + { + "assignments": [ + 7440 + ], + "declarations": [ + { + "constant": false, + "id": 7440, + "mutability": "mutable", + "name": "gaugeFactoriesLength", + "nodeType": "VariableDeclaration", + "scope": 7471, + "src": "3987:28:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7439, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3987:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7444, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 7441, + "name": "gaugeFactories", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7434, + "src": "4018:14:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 7442, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": 4081, + "src": "4018:21:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)" + } + }, + "id": 7443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4018:23:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3987:54:54" + }, + { + "body": { + "id": 7467, + "nodeType": "Block", + "src": "4246:154:54", + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 7461, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7423, + "src": "4338:5:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 7457, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7446, + "src": "4315:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7455, + "name": "gaugeFactories", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7434, + "src": "4287:14:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 7456, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "unchecked_at", + "nodeType": "MemberAccess", + "referencedDeclaration": 4123, + "src": "4287:27:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)" + } + }, + "id": 7458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4287:30:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 7454, + "name": "ILiquidityGaugeFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 768, + "src": "4264:22:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGaugeFactory_$768_$", + "typeString": "type(contract ILiquidityGaugeFactory)" + } + }, + "id": 7459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4264:54:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "id": 7460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "isGaugeFromFactory", + "nodeType": "MemberAccess", + "referencedDeclaration": 760, + "src": "4264:73:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", + "typeString": "function (address) view external returns (bool)" + } + }, + "id": 7462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4264:80:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7466, + "nodeType": "IfStatement", + "src": "4260:130:54", + "trueBody": { + "id": 7465, + "nodeType": "Block", + "src": "4346:44:54", + "statements": [ + { + "expression": { + "hexValue": "74727565", + "id": 7463, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4371:4:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 7430, + "id": 7464, + "nodeType": "Return", + "src": "4364:11:54" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7448, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7446, + "src": "4215:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7449, + "name": "gaugeFactoriesLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7440, + "src": "4219:20:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4215:24:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7468, + "initializationExpression": { + "assignments": [ + 7446 + ], + "declarations": [ + { + "constant": false, + "id": 7446, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 7468, + "src": "4204:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7445, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4204:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7447, + "nodeType": "VariableDeclarationStatement", + "src": "4204:9:54" + }, + "loopExpression": { + "expression": { + "id": 7452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "4241:3:54", + "subExpression": { + "id": 7451, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7446, + "src": "4243:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7453, + "nodeType": "ExpressionStatement", + "src": "4241:3:54" + }, + "nodeType": "ForStatement", + "src": "4199:201:54" + }, + { + "expression": { + "hexValue": "66616c7365", + "id": 7469, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4417:5:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 7430, + "id": 7470, + "nodeType": "Return", + "src": "4410:12:54" + } + ] + }, + "documentation": { + "id": 7421, + "nodeType": "StructuredDocumentation", + "src": "3645:130:54", + "text": " @notice Returns whether `gauge` has been deployed by one of the listed factories for the gauge type `gaugeType`" + }, + "functionSelector": "abfca009", + "id": 7472, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromValidFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7427, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3861:8:54" + }, + "parameters": { + "id": 7426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7423, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 7472, + "src": "3813:13:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7422, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3813:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7425, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 7472, + "src": "3828:19:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 7424, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "3828:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + } + ], + "src": "3812:36:54" + }, + "returnParameters": { + "id": 7430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7429, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7472, + "src": "3879:4:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 7428, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3879:4:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3878:6:54" + }, + "scope": 7653, + "src": "3780:649:54", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 631 + ], + "body": { + "id": 7522, + "nodeType": "Block", + "src": "4864:597:54", + "statements": [ + { + "assignments": [ + 7482 + ], + "declarations": [ + { + "constant": false, + "id": 7482, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 7522, + "src": "5164:11:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7481, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "5164:6:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "id": 7486, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 7483, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7475, + "src": "5178:5:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + } + }, + "id": 7484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "lp_token", + "nodeType": "MemberAccess", + "referencedDeclaration": 942, + "src": "5178:14:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IERC20_$1650_$", + "typeString": "function () view external returns (contract IERC20)" + } + }, + "id": 7485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5178:16:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5164:30:54" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "id": 7494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 7488, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7329, + "src": "5212:10:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "mapping(contract IERC20 => contract ILiquidityGauge)" + } + }, + "id": 7490, + "indexExpression": { + "id": 7489, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7482, + "src": "5223:4:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5212:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 7492, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5248:1:54", + "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": 7491, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "5232:15:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 7493, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5232:18:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "src": "5212:38:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4475706c6963617465206761756765", + "id": 7495, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5252:17:54", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8ef0a1f9ef77b1381d598c9c3766898262213c080a9785bf28410c812c4543b7", + "typeString": "literal_string \"Duplicate gauge\"" + }, + "value": "Duplicate gauge" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8ef0a1f9ef77b1381d598c9c3766898262213c080a9785bf28410c812c4543b7", + "typeString": "literal_string \"Duplicate gauge\"" + } + ], + "id": 7487, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5204:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7496, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5204:66:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7497, + "nodeType": "ExpressionStatement", + "src": "5204:66:54" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "id": 7503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7499, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7482, + "src": "5288:4:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 7500, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7319, + "src": "5296:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 7501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "token", + "nodeType": "MemberAccess", + "referencedDeclaration": 681, + "src": "5296:22:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IERC20_$1650_$", + "typeString": "function () view external returns (contract IERC20)" + } + }, + "id": 7502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5296:24:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "src": "5288:32:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "43616e6e6f742061646420676175676520666f722038302f32302042414c2d5745544820425054", + "id": 7504, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5322:41:54", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b701fa1b9d0cd4c6fe91a0ed3c273e193c21852b065319a87de436b01db3c27b", + "typeString": "literal_string \"Cannot add gauge for 80/20 BAL-WETH BPT\"" + }, + "value": "Cannot add gauge for 80/20 BAL-WETH BPT" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_b701fa1b9d0cd4c6fe91a0ed3c273e193c21852b065319a87de436b01db3c27b", + "typeString": "literal_string \"Cannot add gauge for 80/20 BAL-WETH BPT\"" + } + ], + "id": 7498, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5280:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5280:84:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7506, + "nodeType": "ExpressionStatement", + "src": "5280:84:54" + }, + { + "expression": { + "id": 7511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 7507, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7329, + "src": "5374:10:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "mapping(contract IERC20 => contract ILiquidityGauge)" + } + }, + "id": 7509, + "indexExpression": { + "id": 7508, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7482, + "src": "5385:4:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5374:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7510, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7475, + "src": "5393:5:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + } + }, + "src": "5374:24:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "id": 7512, + "nodeType": "ExpressionStatement", + "src": "5374:24:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 7516, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7475, + "src": "5427:5:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + } + ], + "id": 7515, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5419:7:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7514, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5419:7:54", + "typeDescriptions": {} + } + }, + "id": 7517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5419:14:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 7518, + "name": "GaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 577, + "src": "5435:9:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_GaugeType_$577_$", + "typeString": "type(enum IGaugeAdder.GaugeType)" + } + }, + "id": 7519, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "Ethereum", + "nodeType": "MemberAccess", + "src": "5435:18:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + ], + "id": 7513, + "name": "_addGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7652, + "src": "5409:9:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_enum$_GaugeType_$577_$returns$__$", + "typeString": "function (address,enum IGaugeAdder.GaugeType)" + } + }, + "id": 7520, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5409:45:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7521, + "nodeType": "ExpressionStatement", + "src": "5409:45:54" + } + ] + }, + "documentation": { + "id": 7473, + "nodeType": "StructuredDocumentation", + "src": "4681:91:54", + "text": " @notice Adds a new gauge to the GaugeController for the \"Ethereum\" type." + }, + "functionSelector": "5e45a273", + "id": 7523, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 7479, + "modifierName": { + "id": 7478, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "4851:12:54", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4851:12:54" + } + ], + "name": "addEthereumGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7477, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4842:8:54" + }, + "parameters": { + "id": 7476, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7475, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 7523, + "src": "4803:28:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + }, + "typeName": { + "id": 7474, + "name": "IStakingLiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 955, + "src": "4803:22:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "4802:30:54" + }, + "returnParameters": { + "id": 7480, + "nodeType": "ParameterList", + "parameters": [], + "src": "4864:0:54" + }, + "scope": 7653, + "src": "4777:684:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 637 + ], + "body": { + "id": 7538, + "nodeType": "Block", + "src": "5839:56:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7533, + "name": "rootGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7526, + "src": "5859:9:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 7534, + "name": "GaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 577, + "src": "5870:9:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_GaugeType_$577_$", + "typeString": "type(enum IGaugeAdder.GaugeType)" + } + }, + "id": 7535, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "Polygon", + "nodeType": "MemberAccess", + "src": "5870:17:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + ], + "id": 7532, + "name": "_addGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7652, + "src": "5849:9:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_enum$_GaugeType_$577_$returns$__$", + "typeString": "function (address,enum IGaugeAdder.GaugeType)" + } + }, + "id": 7536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5849:39:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7537, + "nodeType": "ExpressionStatement", + "src": "5849:39:54" + } + ] + }, + "documentation": { + "id": 7524, + "nodeType": "StructuredDocumentation", + "src": "5467:292:54", + "text": " @notice Adds a new gauge to the GaugeController for the \"Polygon\" type.\n This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n It should not be called with the address of the gauge which is deployed on Polygon" + }, + "functionSelector": "f87fcfa2", + "id": 7539, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 7530, + "modifierName": { + "id": 7529, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "5826:12:54", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5826:12:54" + } + ], + "name": "addPolygonGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7528, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5817:8:54" + }, + "parameters": { + "id": 7527, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7526, + "mutability": "mutable", + "name": "rootGauge", + "nodeType": "VariableDeclaration", + "scope": 7539, + "src": "5789:17:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7525, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5789:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5788:19:54" + }, + "returnParameters": { + "id": 7531, + "nodeType": "ParameterList", + "parameters": [], + "src": "5839:0:54" + }, + "scope": 7653, + "src": "5764:131:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 643 + ], + "body": { + "id": 7554, + "nodeType": "Block", + "src": "6276:57:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7549, + "name": "rootGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7542, + "src": "6296:9:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 7550, + "name": "GaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 577, + "src": "6307:9:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_GaugeType_$577_$", + "typeString": "type(enum IGaugeAdder.GaugeType)" + } + }, + "id": 7551, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "Arbitrum", + "nodeType": "MemberAccess", + "src": "6307:18:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + ], + "id": 7548, + "name": "_addGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7652, + "src": "6286:9:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_enum$_GaugeType_$577_$returns$__$", + "typeString": "function (address,enum IGaugeAdder.GaugeType)" + } + }, + "id": 7552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6286:40:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7553, + "nodeType": "ExpressionStatement", + "src": "6286:40:54" + } + ] + }, + "documentation": { + "id": 7540, + "nodeType": "StructuredDocumentation", + "src": "5901:294:54", + "text": " @notice Adds a new gauge to the GaugeController for the \"Arbitrum\" type.\n This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet.\n It should not be called with the address of the gauge which is deployed on Arbitrum" + }, + "functionSelector": "bf2972d5", + "id": 7555, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 7546, + "modifierName": { + "id": 7545, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "6263:12:54", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6263:12:54" + } + ], + "name": "addArbitrumGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7544, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6254:8:54" + }, + "parameters": { + "id": 7543, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7542, + "mutability": "mutable", + "name": "rootGauge", + "nodeType": "VariableDeclaration", + "scope": 7555, + "src": "6226:17:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7541, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6226:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6225:19:54" + }, + "returnParameters": { + "id": 7547, + "nodeType": "ParameterList", + "parameters": [], + "src": "6276:0:54" + }, + "scope": 7653, + "src": "6200:133:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 651 + ], + "body": { + "id": 7617, + "nodeType": "Block", + "src": "6563:566:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7577, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7569, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7560, + "src": "6655:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + ], + "id": 7568, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6647:7:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7567, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6647:7:54", + "typeDescriptions": {} + } + }, + "id": 7570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6647:18:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 7573, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7319, + "src": "6676:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 7574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "n_gauge_types", + "nodeType": "MemberAccess", + "referencedDeclaration": 707, + "src": "6676:30:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_int128_$", + "typeString": "function () view external returns (int128)" + } + }, + "id": 7575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6676:32:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + ], + "id": 7572, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6668:7:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7571, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6668:7:54", + "typeDescriptions": {} + } + }, + "id": 7576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6668:41:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6647:62:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642067617567652074797065", + "id": 7578, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6711:20:54", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7caf3c99505b1adcab00d79de51bcb4a4a77a851c4653aa92fd723940fb541bd", + "typeString": "literal_string \"Invalid gauge type\"" + }, + "value": "Invalid gauge type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7caf3c99505b1adcab00d79de51bcb4a4a77a851c4653aa92fd723940fb541bd", + "typeString": "literal_string \"Invalid gauge type\"" + } + ], + "id": 7566, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6639:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7579, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6639:93:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7580, + "nodeType": "ExpressionStatement", + "src": "6639:93:54" + }, + { + "expression": { + "arguments": [ + { + "id": 7589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "6822:39:54", + "subExpression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 7586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6858:1:54", + "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": 7585, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6850:7:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7584, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6850:7:54", + "typeDescriptions": {} + } + }, + "id": 7587, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6850:10:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "id": 7582, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "6823:7:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "id": 7583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "isGaugeFromFactory", + "nodeType": "MemberAccess", + "referencedDeclaration": 760, + "src": "6823:26:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", + "typeString": "function (address) view external returns (bool)" + } + }, + "id": 7588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6823:38:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c696420666163746f727920696d706c656d656e746174696f6e", + "id": 7590, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6863:32:54", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e8c32179c84f665ce8d08bd9227f0ffb97fb232183e9391983a3ca8f91606177", + "typeString": "literal_string \"Invalid factory implementation\"" + }, + "value": "Invalid factory implementation" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e8c32179c84f665ce8d08bd9227f0ffb97fb232183e9391983a3ca8f91606177", + "typeString": "literal_string \"Invalid factory implementation\"" + } + ], + "id": 7581, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6814:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6814:82:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7592, + "nodeType": "ExpressionStatement", + "src": "6814:82:54" + }, + { + "assignments": [ + 7596 + ], + "declarations": [ + { + "constant": false, + "id": 7596, + "mutability": "mutable", + "name": "gaugeFactories", + "nodeType": "VariableDeclaration", + "scope": 7617, + "src": "6907:47:54", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 7595, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "6907:24:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + } + ], + "id": 7600, + "initialValue": { + "baseExpression": { + "id": 7597, + "name": "_gaugeFactoriesByType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7325, + "src": "6957:21:54", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_GaugeType_$577_$_t_struct$_AddressSet_$3924_storage_$", + "typeString": "mapping(enum IGaugeAdder.GaugeType => struct EnumerableSet.AddressSet storage ref)" + } + }, + "id": 7599, + "indexExpression": { + "id": 7598, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7560, + "src": "6979:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6957:32:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6907:82:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 7606, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "7034:7:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + ], + "id": 7605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7026:7:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7604, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7026:7:54", + "typeDescriptions": {} + } + }, + "id": 7607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7026:16:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 7602, + "name": "gaugeFactories", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7596, + "src": "7007:14:54", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet storage pointer" + } + }, + "id": 7603, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3965, + "src": "7007:18:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)" + } + }, + "id": 7608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7007:36:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "466163746f727920616c7265616479206164646564", + "id": 7609, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7045:23:54", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_07a4c4ae2a68389b13f8a01f186722b777ab64afd28993d121750075c33b8d85", + "typeString": "literal_string \"Factory already added\"" + }, + "value": "Factory already added" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_07a4c4ae2a68389b13f8a01f186722b777ab64afd28993d121750075c33b8d85", + "typeString": "literal_string \"Factory already added\"" + } + ], + "id": 7601, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6999:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6999:70:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7611, + "nodeType": "ExpressionStatement", + "src": "6999:70:54" + }, + { + "eventCall": { + "arguments": [ + { + "id": 7613, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7560, + "src": "7103:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + { + "id": 7614, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7558, + "src": "7114:7:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + ], + "id": 7612, + "name": "GaugeFactoryAdded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 583, + "src": "7085:17:54", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_enum$_GaugeType_$577_$_t_contract$_ILiquidityGaugeFactory_$768_$returns$__$", + "typeString": "function (enum IGaugeAdder.GaugeType,contract ILiquidityGaugeFactory)" + } + }, + "id": 7615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7085:37:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7616, + "nodeType": "EmitStatement", + "src": "7080:42:54" + } + ] + }, + "documentation": { + "id": 7556, + "nodeType": "StructuredDocumentation", + "src": "6339:110:54", + "text": " @notice Adds `factory` as an allowlisted factory contract for gauges with type `gaugeType`." + }, + "functionSelector": "6440e973", + "id": 7618, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 7564, + "modifierName": { + "id": 7563, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "6550:12:54", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6550:12:54" + } + ], + "name": "addGaugeFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7562, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6541:8:54" + }, + "parameters": { + "id": 7561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7558, + "mutability": "mutable", + "name": "factory", + "nodeType": "VariableDeclaration", + "scope": 7618, + "src": "6479:30:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + }, + "typeName": { + "id": 7557, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "6479:22:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7560, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 7618, + "src": "6511:19:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 7559, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "6511:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + } + ], + "src": "6478:53:54" + }, + "returnParameters": { + "id": 7565, + "nodeType": "ParameterList", + "parameters": [], + "src": "6563:0:54" + }, + "scope": 7653, + "src": "6454:675:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 7651, + "nodeType": "Block", + "src": "7341:378:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 7628, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7621, + "src": "7383:5:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 7629, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7623, + "src": "7390:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + ], + "id": 7627, + "name": "isGaugeFromValidFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7472, + "src": "7359:23:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_enum$_GaugeType_$577_$returns$_t_bool_$", + "typeString": "function (address,enum IGaugeAdder.GaugeType) view returns (bool)" + } + }, + "id": 7630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7359:41:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c6964206761756765", + "id": 7631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7402:15:54", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0f01a4186ff9a4f4fec3be353497709ea5e4152dad176712bbaa55bd57735b49", + "typeString": "literal_string \"Invalid gauge\"" + }, + "value": "Invalid gauge" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0f01a4186ff9a4f4fec3be353497709ea5e4152dad176712bbaa55bd57735b49", + "typeString": "literal_string \"Invalid gauge\"" + } + ], + "id": 7626, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7351:7:54", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7351:67:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7633, + "nodeType": "ExpressionStatement", + "src": "7351:67:54" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 7639, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7319, + "src": "7594:16:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + ], + "id": 7638, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7586:7:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7637, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7586:7:54", + "typeDescriptions": {} + } + }, + "id": 7640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7586:25:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 7643, + "name": "IGaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 720, + "src": "7648:16:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IGaugeController_$720_$", + "typeString": "type(contract IGaugeController)" + } + }, + "id": 7644, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "add_gauge", + "nodeType": "MemberAccess", + "referencedDeclaration": 702, + "src": "7648:26:54", + "typeDescriptions": { + "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_int128_$returns$__$", + "typeString": "function IGaugeController.add_gauge(address,int128)" + } + }, + "id": 7645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "7648:35:54", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + { + "id": 7646, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7621, + "src": "7685:5:54", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 7647, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7623, + "src": "7692:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + ], + "expression": { + "id": 7641, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "7625:3:54", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 7642, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "src": "7625:22:54", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 7648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7625:77:54", + "tryCall": false, + "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": 7634, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7321, + "src": "7540:18:54", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 7636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "performAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 27, + "src": "7540:32:54", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bytes memory) payable external returns (bytes memory)" + } + }, + "id": 7649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7540:172:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 7650, + "nodeType": "ExpressionStatement", + "src": "7540:172:54" + } + ] + }, + "documentation": { + "id": 7619, + "nodeType": "StructuredDocumentation", + "src": "7162:111:54", + "text": " @dev Adds `gauge` to the GaugeController with type `gaugeType` and an initial weight of zero" + }, + "id": 7652, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7624, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7621, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 7652, + "src": "7297:13:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7620, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7297:7:54", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7623, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 7652, + "src": "7312:19:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + }, + "typeName": { + "id": 7622, + "name": "GaugeType", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 577, + "src": "7312:9:54", + "typeDescriptions": { + "typeIdentifier": "t_enum$_GaugeType_$577", + "typeString": "enum IGaugeAdder.GaugeType" + } + }, + "visibility": "internal" + } + ], + "src": "7296:36:54" + }, + "returnParameters": { + "id": 7625, + "nodeType": "ParameterList", + "parameters": [], + "src": "7341:0:54" + }, + "scope": 7653, + "src": "7278:441:54", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 7654, + "src": "1295:6426:54" + } + ], + "src": "688:7034:54" + }, + "id": 54 + }, + "contracts/fee-distribution/FeeDistributor.sol": { + "ast": { + "absolutePath": "contracts/fee-distribution/FeeDistributor.sol", + "exportedSymbols": { + "FeeDistributor": [ + 9062 + ] + }, + "id": 9063, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 7655, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:55" + }, + { + "id": 7656, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:55" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "id": 7657, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 1521, + "src": "747:91:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol", + "id": 7658, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 563, + "src": "839:85:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol", + "id": 7659, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 1036, + "src": "925:83:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "id": 7660, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 4422, + "src": "1010:85:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "id": 7661, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 2478, + "src": "1096:77:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol", + "id": 7662, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 4517, + "src": "1174:79:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "id": 7663, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 4595, + "src": "1254:78:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "id": 7664, + "nodeType": "ImportDirective", + "scope": 9063, + "sourceUnit": 2885, + "src": "1333:66:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 7666, + "name": "IFeeDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 562, + "src": "1956:15:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "id": 7667, + "nodeType": "InheritanceSpecifier", + "src": "1956:15:55" + }, + { + "baseName": { + "id": 7668, + "name": "ReentrancyGuard", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4421, + "src": "1973:15:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ReentrancyGuard_$4421", + "typeString": "contract ReentrancyGuard" + } + }, + "id": 7669, + "nodeType": "InheritanceSpecifier", + "src": "1973:15:55" + } + ], + "contractDependencies": [ + 562, + 4421 + ], + "contractKind": "contract", + "documentation": { + "id": 7665, + "nodeType": "StructuredDocumentation", + "src": "1438:490:55", + "text": " @title Fee Distributor\n @notice Distributes any tokens transferred to the contract (e.g. Protocol fees and any BAL emissions) among veBAL\n holders proportionally based on a snapshot of the week at which the tokens are sent to the FeeDistributor contract.\n @dev Supports distributing arbitrarily many different tokens. In order to start distributing a new token to veBAL\n holders simply transfer the tokens to the `FeeDistributor` contract and then call `checkpointToken`." + }, + "fullyImplemented": true, + "id": 9062, + "linearizedBaseContracts": [ + 9062, + 4421, + 562 + ], + "name": "FeeDistributor", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 7672, + "libraryName": { + "id": 7670, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4594, + "src": "2001:8:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$4594", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1995:27:55", + "typeName": { + "id": 7671, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2014:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 7675, + "libraryName": { + "id": 7673, + "name": "SafeERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4516, + "src": "2033:9:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeERC20_$4516", + "typeString": "library SafeERC20" + } + }, + "nodeType": "UsingForDirective", + "src": "2027:27:55", + "typeName": { + "id": 7674, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2047:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + }, + { + "constant": false, + "id": 7677, + "mutability": "immutable", + "name": "_votingEscrow", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "2060:45:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + }, + "typeName": { + "id": 7676, + "name": "IVotingEscrow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1035, + "src": "2060:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7679, + "mutability": "immutable", + "name": "_startTime", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "2112:36:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7678, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2112:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7681, + "mutability": "mutable", + "name": "_timeCursor", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "2175:27:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7680, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2175:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7685, + "mutability": "mutable", + "name": "_veSupplyCache", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "2208:50:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "typeName": { + "id": 7684, + "keyType": { + "id": 7682, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2216:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "2208:27:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "valueType": { + "id": 7683, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2227:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "private" + }, + { + "canonicalName": "FeeDistributor.TokenState", + "id": 7692, + "members": [ + { + "constant": false, + "id": 7687, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 7692, + "src": "2679:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 7686, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2679:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7689, + "mutability": "mutable", + "name": "timeCursor", + "nodeType": "VariableDeclaration", + "scope": 7692, + "src": "2705:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 7688, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2705:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7691, + "mutability": "mutable", + "name": "cachedBalance", + "nodeType": "VariableDeclaration", + "scope": 7692, + "src": "2732:21:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + }, + "typeName": { + "id": 7690, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "2732:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "visibility": "internal" + } + ], + "name": "TokenState", + "nodeType": "StructDefinition", + "scope": 9062, + "src": "2651:109:55", + "visibility": "public" + }, + { + "constant": false, + "id": 7696, + "mutability": "mutable", + "name": "_tokenState", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "2765:49:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_TokenState_$7692_storage_$", + "typeString": "mapping(contract IERC20 => struct FeeDistributor.TokenState)" + }, + "typeName": { + "id": 7695, + "keyType": { + "id": 7693, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2773:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Mapping", + "src": "2765:29:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_TokenState_$7692_storage_$", + "typeString": "mapping(contract IERC20 => struct FeeDistributor.TokenState)" + }, + "valueType": { + "id": 7694, + "name": "TokenState", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7692, + "src": "2783:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7702, + "mutability": "mutable", + "name": "_tokensPerWeek", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "2820:69:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(contract IERC20 => mapping(uint256 => uint256))" + }, + "typeName": { + "id": 7701, + "keyType": { + "id": 7697, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2828:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Mapping", + "src": "2820:46:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(contract IERC20 => mapping(uint256 => uint256))" + }, + "valueType": { + "id": 7700, + "keyType": { + "id": 7698, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2846:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "2838:27:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "valueType": { + "id": 7699, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2857:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "visibility": "private" + }, + { + "canonicalName": "FeeDistributor.UserState", + "id": 7709, + "members": [ + { + "constant": false, + "id": 7704, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 7709, + "src": "3142:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 7703, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3142:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7706, + "mutability": "mutable", + "name": "timeCursor", + "nodeType": "VariableDeclaration", + "scope": 7709, + "src": "3168:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 7705, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3168:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7708, + "mutability": "mutable", + "name": "lastEpochCheckpointed", + "nodeType": "VariableDeclaration", + "scope": 7709, + "src": "3195:29:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + }, + "typeName": { + "id": 7707, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "3195:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "visibility": "internal" + } + ], + "name": "UserState", + "nodeType": "StructDefinition", + "scope": 9062, + "src": "3115:116:55", + "visibility": "public" + }, + { + "constant": false, + "id": 7713, + "mutability": "mutable", + "name": "_userState", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "3236:48:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserState_$7709_storage_$", + "typeString": "mapping(address => struct FeeDistributor.UserState)" + }, + "typeName": { + "id": 7712, + "keyType": { + "id": 7710, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3244:7:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3236:29:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserState_$7709_storage_$", + "typeString": "mapping(address => struct FeeDistributor.UserState)" + }, + "valueType": { + "id": 7711, + "name": "UserState", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7709, + "src": "3255:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7719, + "mutability": "mutable", + "name": "_userBalanceAtTimestamp", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "3290:79:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(uint256 => uint256))" + }, + "typeName": { + "id": 7718, + "keyType": { + "id": 7714, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3298:7:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3290:47:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(uint256 => uint256))" + }, + "valueType": { + "id": 7717, + "keyType": { + "id": 7715, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3317:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "3309:27:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "valueType": { + "id": 7716, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3328:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 7725, + "mutability": "mutable", + "name": "_userTokenTimeCursor", + "nodeType": "VariableDeclaration", + "scope": 9062, + "src": "3375:75:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$1650_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => uint256))" + }, + "typeName": { + "id": 7724, + "keyType": { + "id": 7720, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3383:7:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3375:46:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$1650_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => uint256))" + }, + "valueType": { + "id": 7723, + "keyType": { + "id": 7721, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "3402:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Mapping", + "src": "3394:26:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_uint256_$", + "typeString": "mapping(contract IERC20 => uint256)" + }, + "valueType": { + "id": 7722, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3412:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "visibility": "private" + }, + { + "body": { + "id": 7779, + "nodeType": "Block", + "src": "3516:753:55", + "statements": [ + { + "expression": { + "id": 7734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7732, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "3526:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7733, + "name": "votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7727, + "src": "3542:12:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "src": "3526:28:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 7735, + "nodeType": "ExpressionStatement", + "src": "3526:28:55" + }, + { + "expression": { + "id": 7740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7736, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7729, + "src": "3565:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 7738, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7729, + "src": "3597:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7737, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "3577:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 7739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3577:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3565:42:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7741, + "nodeType": "ExpressionStatement", + "src": "3565:42:55" + }, + { + "assignments": [ + 7743 + ], + "declarations": [ + { + "constant": false, + "id": 7743, + "mutability": "mutable", + "name": "currentWeek", + "nodeType": "VariableDeclaration", + "scope": 7779, + "src": "3617:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7742, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3617:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7748, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 7745, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3659:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 7746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3659:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7744, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "3639:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 7747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3639:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3617:58:55" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7750, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7729, + "src": "3693:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7751, + "name": "currentWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7743, + "src": "3706:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3693:24:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "43616e6e6f74207374617274206265666f72652063757272656e74207765656b", + "id": 7753, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3719:34:55", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a2c7a1c6d36effa420c04b43d5e8a3ab728c0d15f1dd9cfdf00157469aac0494", + "typeString": "literal_string \"Cannot start before current week\"" + }, + "value": "Cannot start before current week" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a2c7a1c6d36effa420c04b43d5e8a3ab728c0d15f1dd9cfdf00157469aac0494", + "typeString": "literal_string \"Cannot start before current week\"" + } + ], + "id": 7749, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3685:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3685:69:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7755, + "nodeType": "ExpressionStatement", + "src": "3685:69:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7756, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7729, + "src": "3768:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7757, + "name": "currentWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7743, + "src": "3781:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3768:24:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7770, + "nodeType": "IfStatement", + "src": "3764:434:55", + "trueBody": { + "id": 7769, + "nodeType": "Block", + "src": "3794:404:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7762, + "name": "currentWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7743, + "src": "4126:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7760, + "name": "votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7727, + "src": "4101:12:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 7761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "totalSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 990, + "src": "4101:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view external returns (uint256)" + } + }, + "id": 7763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4101:37:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7764, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4141:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4101:41:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5a65726f20746f74616c20737570706c7920726573756c747320696e206c6f737420746f6b656e73", + "id": 7766, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4144:42:55", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ccc2e3e35a756d0d3ed526de1f8044ce6ffcb47cba51a7723baff87899691d36", + "typeString": "literal_string \"Zero total supply results in lost tokens\"" + }, + "value": "Zero total supply results in lost tokens" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ccc2e3e35a756d0d3ed526de1f8044ce6ffcb47cba51a7723baff87899691d36", + "typeString": "literal_string \"Zero total supply results in lost tokens\"" + } + ], + "id": 7759, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4093:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 7767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4093:94:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7768, + "nodeType": "ExpressionStatement", + "src": "4093:94:55" + } + ] + } + }, + { + "expression": { + "id": 7773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7771, + "name": "_startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7679, + "src": "4207:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7772, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7729, + "src": "4220:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4207:22:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7774, + "nodeType": "ExpressionStatement", + "src": "4207:22:55" + }, + { + "expression": { + "id": 7777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7775, + "name": "_timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7681, + "src": "4239:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7776, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7729, + "src": "4253:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4239:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7778, + "nodeType": "ExpressionStatement", + "src": "4239:23:55" + } + ] + }, + "id": 7780, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7730, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7727, + "mutability": "mutable", + "name": "votingEscrow", + "nodeType": "VariableDeclaration", + "scope": 7780, + "src": "3469:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + }, + "typeName": { + "id": 7726, + "name": "IVotingEscrow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1035, + "src": "3469:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7729, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 7780, + "src": "3497:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3497:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3468:47:55" + }, + "returnParameters": { + "id": 7731, + "nodeType": "ParameterList", + "parameters": [], + "src": "3516:0:55" + }, + "scope": 9062, + "src": "3457:812:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 430 + ], + "body": { + "id": 7789, + "nodeType": "Block", + "src": "4428:37:55", + "statements": [ + { + "expression": { + "id": 7787, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "4445:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "functionReturnParameters": 7786, + "id": 7788, + "nodeType": "Return", + "src": "4438:20:55" + } + ] + }, + "documentation": { + "id": 7781, + "nodeType": "StructuredDocumentation", + "src": "4275:74:55", + "text": " @notice Returns the VotingEscrow (veBAL) token contract" + }, + "functionSelector": "08b0308a", + "id": 7790, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVotingEscrow", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7783, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4395:8:55" + }, + "parameters": { + "id": 7782, + "nodeType": "ParameterList", + "parameters": [], + "src": "4378:2:55" + }, + "returnParameters": { + "id": 7786, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7785, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7790, + "src": "4413:13:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + }, + "typeName": { + "id": 7784, + "name": "IVotingEscrow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1035, + "src": "4413:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "visibility": "internal" + } + ], + "src": "4412:15:55" + }, + "scope": 9062, + "src": "4354:111:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 436 + ], + "body": { + "id": 7799, + "nodeType": "Block", + "src": "4651:35:55", + "statements": [ + { + "expression": { + "id": 7797, + "name": "_timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7681, + "src": "4668:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7796, + "id": 7798, + "nodeType": "Return", + "src": "4661:18:55" + } + ] + }, + "documentation": { + "id": 7791, + "nodeType": "StructuredDocumentation", + "src": "4471:109:55", + "text": " @notice Returns the global time cursor representing the most earliest uncheckpointed week." + }, + "functionSelector": "82aa5ad4", + "id": 7800, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTimeCursor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7793, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4624:8:55" + }, + "parameters": { + "id": 7792, + "nodeType": "ParameterList", + "parameters": [], + "src": "4607:2:55" + }, + "returnParameters": { + "id": 7796, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7795, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7800, + "src": "4642:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7794, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4642:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4641:9:55" + }, + "scope": 9062, + "src": "4585:101:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 444 + ], + "body": { + "id": 7814, + "nodeType": "Block", + "src": "4947:51:55", + "statements": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 7809, + "name": "_userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7713, + "src": "4964:10:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserState_$7709_storage_$", + "typeString": "mapping(address => struct FeeDistributor.UserState storage ref)" + } + }, + "id": 7811, + "indexExpression": { + "id": 7810, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7803, + "src": "4975:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4964:16:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage", + "typeString": "struct FeeDistributor.UserState storage ref" + } + }, + "id": 7812, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "timeCursor", + "nodeType": "MemberAccess", + "referencedDeclaration": 7706, + "src": "4964:27:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 7808, + "id": 7813, + "nodeType": "Return", + "src": "4957:34:55" + } + ] + }, + "documentation": { + "id": 7801, + "nodeType": "StructuredDocumentation", + "src": "4692:168:55", + "text": " @notice Returns the user-level time cursor representing the most earliest uncheckpointed week.\n @param user - The address of the user to query." + }, + "functionSelector": "876e69a1", + "id": 7815, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getUserTimeCursor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7805, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4920:8:55" + }, + "parameters": { + "id": 7804, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7803, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 7815, + "src": "4892:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7802, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4892:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4891:14:55" + }, + "returnParameters": { + "id": 7808, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7807, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7815, + "src": "4938:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7806, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4938:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4937:9:55" + }, + "scope": 9062, + "src": "4865:133:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 452 + ], + "body": { + "id": 7829, + "nodeType": "Block", + "src": "5277:53:55", + "statements": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 7824, + "name": "_tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7696, + "src": "5294:11:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_TokenState_$7692_storage_$", + "typeString": "mapping(contract IERC20 => struct FeeDistributor.TokenState storage ref)" + } + }, + "id": 7826, + "indexExpression": { + "id": 7825, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7818, + "src": "5306:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5294:18:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage", + "typeString": "struct FeeDistributor.TokenState storage ref" + } + }, + "id": 7827, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "timeCursor", + "nodeType": "MemberAccess", + "referencedDeclaration": 7689, + "src": "5294:29:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 7823, + "id": 7828, + "nodeType": "Return", + "src": "5287:36:55" + } + ] + }, + "documentation": { + "id": 7816, + "nodeType": "StructuredDocumentation", + "src": "5004:185:55", + "text": " @notice Returns the token-level time cursor storing the timestamp at up to which tokens have been distributed.\n @param token - The ERC20 token address to query." + }, + "functionSelector": "acbc1428", + "id": 7830, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTokenTimeCursor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7820, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5250:8:55" + }, + "parameters": { + "id": 7819, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7818, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7830, + "src": "5222:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7817, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "5222:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "5221:14:55" + }, + "returnParameters": { + "id": 7823, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7822, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7830, + "src": "5268:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7821, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5268:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5267:9:55" + }, + "scope": 9062, + "src": "5194:136:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 462 + ], + "body": { + "id": 7846, + "nodeType": "Block", + "src": "5678:60:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7842, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7833, + "src": "5719:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 7843, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7835, + "src": "5725:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 7841, + "name": "_getUserTokenTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "5695:23:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_contract$_IERC20_$1650_$returns$_t_uint256_$", + "typeString": "function (address,contract IERC20) view returns (uint256)" + } + }, + "id": 7844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5695:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7840, + "id": 7845, + "nodeType": "Return", + "src": "5688:43:55" + } + ] + }, + "documentation": { + "id": 7831, + "nodeType": "StructuredDocumentation", + "src": "5336:236:55", + "text": " @notice Returns the user-level time cursor storing the timestamp of the latest token distribution claimed.\n @param user - The address of the user to query.\n @param token - The ERC20 token address to query." + }, + "functionSelector": "8050a7ee", + "id": 7847, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getUserTokenTimeCursor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7837, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5651:8:55" + }, + "parameters": { + "id": 7836, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7833, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 7847, + "src": "5609:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7832, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5609:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7835, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7847, + "src": "5623:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7834, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "5623:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "5608:28:55" + }, + "returnParameters": { + "id": 7840, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7839, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7847, + "src": "5669:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7838, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5669:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5668:9:55" + }, + "scope": 9062, + "src": "5577:161:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 472 + ], + "body": { + "id": 7864, + "nodeType": "Block", + "src": "6337:64:55", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 7858, + "name": "_userBalanceAtTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7719, + "src": "6354:23:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(uint256 => uint256))" + } + }, + "id": 7860, + "indexExpression": { + "id": 7859, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7850, + "src": "6378:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6354:29:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 7862, + "indexExpression": { + "id": 7861, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7852, + "src": "6384:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6354:40:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7857, + "id": 7863, + "nodeType": "Return", + "src": "6347:47:55" + } + ] + }, + "documentation": { + "id": 7848, + "nodeType": "StructuredDocumentation", + "src": "5744:479:55", + "text": " @notice Returns the user's cached balance of veBAL as of the provided timestamp.\n @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n This function requires `user` to have been checkpointed past `timestamp` so that their balance is cached.\n @param user - The address of the user of which to read the cached balance of.\n @param timestamp - The timestamp at which to read the `user`'s cached balance at." + }, + "functionSelector": "de681faf", + "id": 7865, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getUserBalanceAtTimestamp", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7854, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6310:8:55" + }, + "parameters": { + "id": 7853, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7850, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 7865, + "src": "6263:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7849, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6263:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7852, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 7865, + "src": "6277:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6277:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6262:33:55" + }, + "returnParameters": { + "id": 7857, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7856, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7865, + "src": "6328:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7855, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6328:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6327:9:55" + }, + "scope": 9062, + "src": "6228:173:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 480 + ], + "body": { + "id": 7878, + "nodeType": "Block", + "src": "6898:49:55", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 7874, + "name": "_veSupplyCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7685, + "src": "6915:14:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 7876, + "indexExpression": { + "id": 7875, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7868, + "src": "6930:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6915:25:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7873, + "id": 7877, + "nodeType": "Return", + "src": "6908:32:55" + } + ] + }, + "documentation": { + "id": 7866, + "nodeType": "StructuredDocumentation", + "src": "6407:391:55", + "text": " @notice Returns the cached total supply of veBAL as of the provided timestamp.\n @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values.\n This function requires the contract to have been checkpointed past `timestamp` so that the supply is cached.\n @param timestamp - The timestamp at which to read the cached total supply at." + }, + "functionSelector": "4f3c5090", + "id": 7879, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTotalSupplyAtTimestamp", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7870, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6871:8:55" + }, + "parameters": { + "id": 7869, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7868, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 7879, + "src": "6838:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7867, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6838:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6837:19:55" + }, + "returnParameters": { + "id": 7873, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7872, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7879, + "src": "6889:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7871, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6889:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6888:9:55" + }, + "scope": 9062, + "src": "6803:144:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 488 + ], + "body": { + "id": 7893, + "nodeType": "Block", + "src": "7124:56:55", + "statements": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 7888, + "name": "_tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7696, + "src": "7141:11:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_TokenState_$7692_storage_$", + "typeString": "mapping(contract IERC20 => struct FeeDistributor.TokenState storage ref)" + } + }, + "id": 7890, + "indexExpression": { + "id": 7889, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7882, + "src": "7153:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7141:18:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage", + "typeString": "struct FeeDistributor.TokenState storage ref" + } + }, + "id": 7891, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "cachedBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 7691, + "src": "7141:32:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "functionReturnParameters": 7887, + "id": 7892, + "nodeType": "Return", + "src": "7134:39:55" + } + ] + }, + "documentation": { + "id": 7880, + "nodeType": "StructuredDocumentation", + "src": "6953:82:55", + "text": " @notice Returns the FeeDistributor's cached balance of `token`." + }, + "functionSelector": "2308805b", + "id": 7894, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTokenLastBalance", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7884, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7097:8:55" + }, + "parameters": { + "id": 7883, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7882, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7894, + "src": "7069:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7881, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "7069:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "7068:14:55" + }, + "returnParameters": { + "id": 7887, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7886, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7894, + "src": "7115:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7885, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7115:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7114:9:55" + }, + "scope": 9062, + "src": "7040:140:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 498 + ], + "body": { + "id": 7911, + "nodeType": "Block", + "src": "7581:56:55", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 7905, + "name": "_tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7702, + "src": "7598:14:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(contract IERC20 => mapping(uint256 => uint256))" + } + }, + "id": 7907, + "indexExpression": { + "id": 7906, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7897, + "src": "7613:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7598:21:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 7909, + "indexExpression": { + "id": 7908, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7899, + "src": "7620:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7598:32:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7904, + "id": 7910, + "nodeType": "Return", + "src": "7591:39:55" + } + ] + }, + "documentation": { + "id": 7895, + "nodeType": "StructuredDocumentation", + "src": "7186:280:55", + "text": " @notice Returns the amount of `token` which the FeeDistributor received in the week beginning at `timestamp`.\n @param token - The ERC20 token address to query.\n @param timestamp - The timestamp corresponding to the beginning of the week of interest." + }, + "functionSelector": "d3dc4ca1", + "id": 7912, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTokensDistributedInWeek", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7901, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7554:8:55" + }, + "parameters": { + "id": 7900, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7897, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7912, + "src": "7507:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7896, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "7507:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7899, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 7912, + "src": "7521:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7898, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7521:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7506:33:55" + }, + "returnParameters": { + "id": 7904, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7903, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7912, + "src": "7572:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7902, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7572:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7571:9:55" + }, + "scope": 9062, + "src": "7471:166:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 506 + ], + "body": { + "id": 7945, + "nodeType": "Block", + "src": "8371:153:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7924, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7915, + "src": "8398:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "66616c7365", + "id": 7925, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8405:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 7923, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "8381:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 7926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8381:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7927, + "nodeType": "ExpressionStatement", + "src": "8381:30:55" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 7931, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "8444:3:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 7932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "8444:10:55", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 7935, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "8464:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FeeDistributor_$9062", + "typeString": "contract FeeDistributor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FeeDistributor_$9062", + "typeString": "contract FeeDistributor" + } + ], + "id": 7934, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8456:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7933, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8456:7:55", + "typeDescriptions": {} + } + }, + "id": 7936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8456:13:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 7937, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7917, + "src": "8471:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7928, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7915, + "src": "8421:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 7930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 4479, + "src": "8421:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1650_$", + "typeString": "function (contract IERC20,address,address,uint256)" + } + }, + "id": 7938, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8421:57:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7939, + "nodeType": "ExpressionStatement", + "src": "8421:57:55" + }, + { + "expression": { + "arguments": [ + { + "id": 7941, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7915, + "src": "8505:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "74727565", + "id": 7942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8512:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 7940, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "8488:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 7943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8488:29:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7944, + "nodeType": "ExpressionStatement", + "src": "8488:29:55" + } + ] + }, + "documentation": { + "id": 7913, + "nodeType": "StructuredDocumentation", + "src": "7662:621:55", + "text": " @notice Deposits tokens to be distributed in the current week.\n @dev Sending tokens directly to the FeeDistributor instead of using `depositToken` may result in tokens being\n retroactively distributed to past weeks, or for the distribution to carry over to future weeks.\n If for some reason `depositToken` cannot be called, in order to ensure that all tokens are correctly distributed\n manually call `checkpointToken` before and after the token transfer.\n @param token - The ERC20 token address to distribute.\n @param amount - The amount of tokens to deposit." + }, + "functionSelector": "338b5dea", + "id": 7946, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 7921, + "modifierName": { + "id": 7920, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "8358:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8358:12:55" + } + ], + "name": "depositToken", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7919, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8349:8:55" + }, + "parameters": { + "id": 7918, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7915, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7946, + "src": "8310:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 7914, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "8310:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7917, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 7946, + "src": "8324:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7916, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8324:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8309:30:55" + }, + "returnParameters": { + "id": 7922, + "nodeType": "ParameterList", + "parameters": [], + "src": "8371:0:55" + }, + "scope": 9062, + "src": "8288:236:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 516 + ], + "body": { + "id": 8014, + "nodeType": "Block", + "src": "8995:355:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 7962, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7950, + "src": "9041:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 7963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9041:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 7964, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7953, + "src": "9056:7:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 7965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9056:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7959, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2477, + "src": "9005:12:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$2477_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 7961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 2385, + "src": "9005:35:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 7966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9005:66:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7967, + "nodeType": "ExpressionStatement", + "src": "9005:66:55" + }, + { + "assignments": [ + 7969 + ], + "declarations": [ + { + "constant": false, + "id": 7969, + "mutability": "mutable", + "name": "length", + "nodeType": "VariableDeclaration", + "scope": 8014, + "src": "9082:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7968, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9082:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7972, + "initialValue": { + "expression": { + "id": 7970, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7950, + "src": "9099:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 7971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9099:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9082:30:55" + }, + { + "body": { + "id": 8012, + "nodeType": "Block", + "src": "9159:185:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 7984, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7950, + "src": "9190:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 7986, + "indexExpression": { + "id": 7985, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7974, + "src": "9197:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9190:9:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "66616c7365", + "id": 7987, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9201:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 7983, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "9173:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 7988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9173:34:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7989, + "nodeType": "ExpressionStatement", + "src": "9173:34:55" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 7994, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "9248:3:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 7995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "9248:10:55", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 7998, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9268:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FeeDistributor_$9062", + "typeString": "contract FeeDistributor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FeeDistributor_$9062", + "typeString": "contract FeeDistributor" + } + ], + "id": 7997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9260:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 7996, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9260:7:55", + "typeDescriptions": {} + } + }, + "id": 7999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9260:13:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "baseExpression": { + "id": 8000, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7953, + "src": "9275:7:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 8002, + "indexExpression": { + "id": 8001, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7974, + "src": "9283:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9275:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 7990, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7950, + "src": "9221:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 7992, + "indexExpression": { + "id": 7991, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7974, + "src": "9228:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9221:9:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 7993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 4479, + "src": "9221:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1650_$", + "typeString": "function (contract IERC20,address,address,uint256)" + } + }, + "id": 8003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9221:65:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8004, + "nodeType": "ExpressionStatement", + "src": "9221:65:55" + }, + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 8006, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7950, + "src": "9317:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 8008, + "indexExpression": { + "id": 8007, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7974, + "src": "9324:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9317:9:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "74727565", + "id": 8009, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9328:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8005, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "9300:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 8010, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9300:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8011, + "nodeType": "ExpressionStatement", + "src": "9300:33:55" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7979, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7977, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7974, + "src": "9142:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7978, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7969, + "src": "9146:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9142:10:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8013, + "initializationExpression": { + "assignments": [ + 7974 + ], + "declarations": [ + { + "constant": false, + "id": 7974, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8013, + "src": "9127:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7973, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9127:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7976, + "initialValue": { + "hexValue": "30", + "id": 7975, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9139:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "9127:13:55" + }, + "loopExpression": { + "expression": { + "id": 7981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "9154:3:55", + "subExpression": { + "id": 7980, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7974, + "src": "9156:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7982, + "nodeType": "ExpressionStatement", + "src": "9154:3:55" + }, + "nodeType": "ForStatement", + "src": "9122:222:55" + } + ] + }, + "documentation": { + "id": 7947, + "nodeType": "StructuredDocumentation", + "src": "8530:352:55", + "text": " @notice Deposits tokens to be distributed in the current week.\n @dev A version of `depositToken` which supports depositing multiple `tokens` at once.\n See `depositToken` for more details.\n @param tokens - An array of ERC20 token addresses to distribute.\n @param amounts - An array of token amounts to deposit." + }, + "functionSelector": "7b8d6221", + "id": 8015, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 7957, + "modifierName": { + "id": 7956, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "8982:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8982:12:55" + } + ], + "name": "depositTokens", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 7955, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8973:8:55" + }, + "parameters": { + "id": 7954, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7950, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 8015, + "src": "8910:24:55", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 7948, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "8910:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 7949, + "nodeType": "ArrayTypeName", + "src": "8910:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7953, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 8015, + "src": "8936:26:55", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 7951, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8936:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 7952, + "nodeType": "ArrayTypeName", + "src": "8936:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "8909:54:55" + }, + "returnParameters": { + "id": 7958, + "nodeType": "ParameterList", + "parameters": [], + "src": "8995:0:55" + }, + "scope": 9062, + "src": "8887:463:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 520 + ], + "body": { + "id": 8025, + "nodeType": "Block", + "src": "9643:41:55", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8022, + "name": "_checkpointTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8913, + "src": "9653:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9653:24:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8024, + "nodeType": "ExpressionStatement", + "src": "9653:24:55" + } + ] + }, + "documentation": { + "id": 8016, + "nodeType": "StructuredDocumentation", + "src": "9378:207:55", + "text": " @notice Caches the total supply of veBAL at the beginning of each week.\n This function will be called automatically before claiming tokens to ensure the contract is properly updated." + }, + "functionSelector": "c2c4c5c1", + "id": 8026, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8020, + "modifierName": { + "id": 8019, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "9630:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "9630:12:55" + } + ], + "name": "checkpoint", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8018, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9621:8:55" + }, + "parameters": { + "id": 8017, + "nodeType": "ParameterList", + "parameters": [], + "src": "9609:2:55" + }, + "returnParameters": { + "id": 8021, + "nodeType": "ParameterList", + "parameters": [], + "src": "9643:0:55" + }, + "scope": 9062, + "src": "9590:94:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 526 + ], + "body": { + "id": 8039, + "nodeType": "Block", + "src": "10038:45:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8036, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8029, + "src": "10071:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8035, + "name": "_checkpointUserBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8852, + "src": "10048:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10048:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8038, + "nodeType": "ExpressionStatement", + "src": "10048:28:55" + } + ] + }, + "documentation": { + "id": 8027, + "nodeType": "StructuredDocumentation", + "src": "9690:274:55", + "text": " @notice Caches the user's balance of veBAL at the beginning of each week.\n This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n @param user - The address of the user to be checkpointed." + }, + "functionSelector": "14866e08", + "id": 8040, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8033, + "modifierName": { + "id": 8032, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "10025:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "10025:12:55" + } + ], + "name": "checkpointUser", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8031, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10016:8:55" + }, + "parameters": { + "id": 8030, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8029, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 8040, + "src": "9993:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8028, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9993:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9992:14:55" + }, + "returnParameters": { + "id": 8034, + "nodeType": "ParameterList", + "parameters": [], + "src": "10038:0:55" + }, + "scope": 9062, + "src": "9969:114:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 532 + ], + "body": { + "id": 8054, + "nodeType": "Block", + "src": "10673:46:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8050, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8043, + "src": "10700:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "74727565", + "id": 8051, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10707:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8049, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "10683:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 8052, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10683:29:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8053, + "nodeType": "ExpressionStatement", + "src": "10683:29:55" + } + ] + }, + "documentation": { + "id": 8041, + "nodeType": "StructuredDocumentation", + "src": "10089:509:55", + "text": " @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n @dev Any `token` balance held by the FeeDistributor above that which is returned by `getTokenLastBalance`\n will be distributed evenly across the time period since `token` was last checkpointed.\n This function will be called automatically before claiming tokens to ensure the contract is properly updated.\n @param token - The ERC20 token address to be checkpointed." + }, + "functionSelector": "3902b9bc", + "id": 8055, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8047, + "modifierName": { + "id": 8046, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "10660:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "10660:12:55" + } + ], + "name": "checkpointToken", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8045, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10651:8:55" + }, + "parameters": { + "id": 8044, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8043, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 8055, + "src": "10628:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 8042, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "10628:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "10627:14:55" + }, + "returnParameters": { + "id": 8048, + "nodeType": "ParameterList", + "parameters": [], + "src": "10673:0:55" + }, + "scope": 9062, + "src": "10603:116:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 539 + ], + "body": { + "id": 8089, + "nodeType": "Block", + "src": "11138:163:55", + "statements": [ + { + "assignments": [ + 8066 + ], + "declarations": [ + { + "constant": false, + "id": 8066, + "mutability": "mutable", + "name": "tokensLength", + "nodeType": "VariableDeclaration", + "scope": 8089, + "src": "11148:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8065, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11148:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8069, + "initialValue": { + "expression": { + "id": 8067, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8059, + "src": "11171:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 8068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11171:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11148:36:55" + }, + { + "body": { + "id": 8087, + "nodeType": "Block", + "src": "11237:58:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 8081, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8059, + "src": "11268:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 8083, + "indexExpression": { + "id": 8082, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8071, + "src": "11275:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11268:9:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "74727565", + "id": 8084, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11279:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8080, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "11251:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 8085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11251:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8086, + "nodeType": "ExpressionStatement", + "src": "11251:33:55" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8074, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8071, + "src": "11214:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 8075, + "name": "tokensLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8066, + "src": "11218:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11214:16:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8088, + "initializationExpression": { + "assignments": [ + 8071 + ], + "declarations": [ + { + "constant": false, + "id": 8071, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8088, + "src": "11199:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8070, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11199:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8073, + "initialValue": { + "hexValue": "30", + "id": 8072, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11211:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11199:13:55" + }, + "loopExpression": { + "expression": { + "id": 8078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "11232:3:55", + "subExpression": { + "id": 8077, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8071, + "src": "11234:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8079, + "nodeType": "ExpressionStatement", + "src": "11232:3:55" + }, + "nodeType": "ForStatement", + "src": "11194:101:55" + } + ] + }, + "documentation": { + "id": 8056, + "nodeType": "StructuredDocumentation", + "src": "10725:325:55", + "text": " @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions.\n @dev A version of `checkpointToken` which supports checkpointing multiple tokens.\n See `checkpointToken` for more details.\n @param tokens - An array of ERC20 token addresses to be checkpointed." + }, + "functionSelector": "905d10ac", + "id": 8090, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8063, + "modifierName": { + "id": 8062, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "11125:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "11125:12:55" + } + ], + "name": "checkpointTokens", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8061, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11116:8:55" + }, + "parameters": { + "id": 8060, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8059, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 8090, + "src": "11081:24:55", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 8057, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "11081:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 8058, + "nodeType": "ArrayTypeName", + "src": "11081:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "11080:26:55" + }, + "returnParameters": { + "id": 8064, + "nodeType": "ParameterList", + "parameters": [], + "src": "11138:0:55" + }, + "scope": 9062, + "src": "11055:246:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 549 + ], + "body": { + "id": 8124, + "nodeType": "Block", + "src": "11912:194:55", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8103, + "name": "_checkpointTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8913, + "src": "11922:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11922:24:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8105, + "nodeType": "ExpressionStatement", + "src": "11922:24:55" + }, + { + "expression": { + "arguments": [ + { + "id": 8107, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8095, + "src": "11973:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "66616c7365", + "id": 8108, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11980:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8106, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "11956:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 8109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11956:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8110, + "nodeType": "ExpressionStatement", + "src": "11956:30:55" + }, + { + "expression": { + "arguments": [ + { + "id": 8112, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8093, + "src": "12019:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8111, + "name": "_checkpointUserBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8852, + "src": "11996:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11996:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8114, + "nodeType": "ExpressionStatement", + "src": "11996:28:55" + }, + { + "assignments": [ + 8116 + ], + "declarations": [ + { + "constant": false, + "id": 8116, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 8124, + "src": "12035:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8115, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12035:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8121, + "initialValue": { + "arguments": [ + { + "id": 8118, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8093, + "src": "12064:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8119, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8095, + "src": "12070:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 8117, + "name": "_claimToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "12052:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$1650_$returns$_t_uint256_$", + "typeString": "function (address,contract IERC20) returns (uint256)" + } + }, + "id": 8120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12052:24:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12035:41:55" + }, + { + "expression": { + "id": 8122, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8116, + "src": "12093:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8102, + "id": 8123, + "nodeType": "Return", + "src": "12086:13:55" + } + ] + }, + "documentation": { + "id": 8091, + "nodeType": "StructuredDocumentation", + "src": "11324:486:55", + "text": " @notice Claims all pending distributions of the provided token for a user.\n @dev It's not necessary to explicitly checkpoint before calling this function, it will ensure the FeeDistributor\n is up to date before calculating the amount of tokens to be claimed.\n @param user - The user on behalf of which to claim.\n @param token - The ERC20 token address to be claimed.\n @return The amount of `token` sent to `user` as a result of claiming." + }, + "functionSelector": "ca31879d", + "id": 8125, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8099, + "modifierName": { + "id": 8098, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "11881:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "11881:12:55" + } + ], + "name": "claimToken", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8097, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11872:8:55" + }, + "parameters": { + "id": 8096, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8093, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 8125, + "src": "11835:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8092, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11835:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8095, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 8125, + "src": "11849:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 8094, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "11849:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "11834:28:55" + }, + "returnParameters": { + "id": 8102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8101, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8125, + "src": "11903:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8100, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11903:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11902:9:55" + }, + "scope": 9062, + "src": "11815:291:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 561 + ], + "body": { + "id": 8203, + "nodeType": "Block", + "src": "12724:542:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8141, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "12816:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "12816:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 8143, + "name": "_startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7679, + "src": "12834:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12816:28:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "46656520646973747269627574696f6e20686173206e6f74207374617274656420796574", + "id": 8145, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12846:38:55", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_47b66ecabfc14b155e7704a5a379d2627d619ee8d9c3fea3fc6f216a8bfd4d76", + "typeString": "literal_string \"Fee distribution has not started yet\"" + }, + "value": "Fee distribution has not started yet" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_47b66ecabfc14b155e7704a5a379d2627d619ee8d9c3fea3fc6f216a8bfd4d76", + "typeString": "literal_string \"Fee distribution has not started yet\"" + } + ], + "id": 8140, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "12808:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12808:77:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8147, + "nodeType": "ExpressionStatement", + "src": "12808:77:55" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8148, + "name": "_checkpointTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8913, + "src": "12895:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12895:24:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8150, + "nodeType": "ExpressionStatement", + "src": "12895:24:55" + }, + { + "expression": { + "arguments": [ + { + "id": 8152, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8128, + "src": "12952:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8151, + "name": "_checkpointUserBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8852, + "src": "12929:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12929:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8154, + "nodeType": "ExpressionStatement", + "src": "12929:28:55" + }, + { + "assignments": [ + 8156 + ], + "declarations": [ + { + "constant": false, + "id": 8156, + "mutability": "mutable", + "name": "tokensLength", + "nodeType": "VariableDeclaration", + "scope": 8203, + "src": "12968:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8155, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12968:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8159, + "initialValue": { + "expression": { + "id": 8157, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8131, + "src": "12991:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 8158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12991:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12968:36:55" + }, + { + "assignments": [ + 8164 + ], + "declarations": [ + { + "constant": false, + "id": 8164, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 8203, + "src": "13014:24:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 8162, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13014:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8163, + "nodeType": "ArrayTypeName", + "src": "13014:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 8170, + "initialValue": { + "arguments": [ + { + "id": 8168, + "name": "tokensLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8156, + "src": "13055:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8167, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "13041:13:55", + "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": 8165, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13045:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8166, + "nodeType": "ArrayTypeName", + "src": "13045:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 8169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13041:27:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13014:54:55" + }, + { + "body": { + "id": 8199, + "nodeType": "Block", + "src": "13121:114:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 8182, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8131, + "src": "13152:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 8184, + "indexExpression": { + "id": 8183, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8172, + "src": "13159:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13152:9:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "hexValue": "66616c7365", + "id": 8185, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13163:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8181, + "name": "_checkpointToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8599, + "src": "13135:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_bool_$returns$__$", + "typeString": "function (contract IERC20,bool)" + } + }, + "id": 8186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13135:34:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8187, + "nodeType": "ExpressionStatement", + "src": "13135:34:55" + }, + { + "expression": { + "id": 8197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 8188, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8164, + "src": "13183:7:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 8190, + "indexExpression": { + "id": 8189, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8172, + "src": "13191:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "13183:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8192, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8128, + "src": "13208:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "baseExpression": { + "id": 8193, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8131, + "src": "13214:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[] calldata" + } + }, + "id": 8195, + "indexExpression": { + "id": 8194, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8172, + "src": "13221:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13214:9:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 8191, + "name": "_claimToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "13196:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$1650_$returns$_t_uint256_$", + "typeString": "function (address,contract IERC20) returns (uint256)" + } + }, + "id": 8196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13196:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13183:41:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8198, + "nodeType": "ExpressionStatement", + "src": "13183:41:55" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8175, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8172, + "src": "13098:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 8176, + "name": "tokensLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8156, + "src": "13102:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13098:16:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8200, + "initializationExpression": { + "assignments": [ + 8172 + ], + "declarations": [ + { + "constant": false, + "id": 8172, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8200, + "src": "13083:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8171, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13083:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8174, + "initialValue": { + "hexValue": "30", + "id": 8173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13095:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13083:13:55" + }, + "loopExpression": { + "expression": { + "id": 8179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "13116:3:55", + "subExpression": { + "id": 8178, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8172, + "src": "13118:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8180, + "nodeType": "ExpressionStatement", + "src": "13116:3:55" + }, + "nodeType": "ForStatement", + "src": "13078:157:55" + }, + { + "expression": { + "id": 8201, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8164, + "src": "13252:7:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 8139, + "id": 8202, + "nodeType": "Return", + "src": "13245:14:55" + } + ] + }, + "documentation": { + "id": 8126, + "nodeType": "StructuredDocumentation", + "src": "12112:452:55", + "text": " @notice Claims a number of tokens on behalf of a user.\n @dev A version of `claimToken` which supports claiming multiple `tokens` on behalf of `user`.\n See `claimToken` for more details.\n @param user - The user on behalf of which to claim.\n @param tokens - An array of ERC20 token addresses to be claimed.\n @return An array of the amounts of each token in `tokens` sent to `user` as a result of claiming." + }, + "functionSelector": "88720467", + "id": 8204, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8135, + "modifierName": { + "id": 8134, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "12672:12:55", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "12672:12:55" + } + ], + "name": "claimTokens", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 8133, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12655:8:55" + }, + "parameters": { + "id": 8132, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8128, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 8204, + "src": "12590:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8127, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12590:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8131, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 8204, + "src": "12604:24:55", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 8129, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "12604:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 8130, + "nodeType": "ArrayTypeName", + "src": "12604:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "12589:40:55" + }, + "returnParameters": { + "id": 8139, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8138, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8204, + "src": "12702:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 8136, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12702:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8137, + "nodeType": "ArrayTypeName", + "src": "12702:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "12701:18:55" + }, + "scope": 9062, + "src": "12569:697:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 8330, + "nodeType": "Block", + "src": "13530:1567:55", + "statements": [ + { + "assignments": [ + 8215 + ], + "declarations": [ + { + "constant": false, + "id": 8215, + "mutability": "mutable", + "name": "tokenState", + "nodeType": "VariableDeclaration", + "scope": 8330, + "src": "13540:29:55", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState" + }, + "typeName": { + "id": 8214, + "name": "TokenState", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7692, + "src": "13540:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState" + } + }, + "visibility": "internal" + } + ], + "id": 8219, + "initialValue": { + "baseExpression": { + "id": 8216, + "name": "_tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7696, + "src": "13572:11:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_TokenState_$7692_storage_$", + "typeString": "mapping(contract IERC20 => struct FeeDistributor.TokenState storage ref)" + } + }, + "id": 8218, + "indexExpression": { + "id": 8217, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "13584:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13572:18:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage", + "typeString": "struct FeeDistributor.TokenState storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13540:50:55" + }, + { + "assignments": [ + 8221 + ], + "declarations": [ + { + "constant": false, + "id": 8221, + "mutability": "mutable", + "name": "userTimeCursor", + "nodeType": "VariableDeclaration", + "scope": 8330, + "src": "13600:22:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8220, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13600:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8226, + "initialValue": { + "arguments": [ + { + "id": 8223, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8207, + "src": "13649:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8224, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "13655:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 8222, + "name": "_getUserTokenTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "13625:23:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_contract$_IERC20_$1650_$returns$_t_uint256_$", + "typeString": "function (address,contract IERC20) view returns (uint256)" + } + }, + "id": 8225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13625:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13600:61:55" + }, + { + "assignments": [ + 8228 + ], + "declarations": [ + { + "constant": false, + "id": 8228, + "mutability": "mutable", + "name": "currentActiveWeek", + "nodeType": "VariableDeclaration", + "scope": 8330, + "src": "13776:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8227, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13776:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8233, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 8230, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8215, + "src": "13824:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8231, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "timeCursor", + "nodeType": "MemberAccess", + "referencedDeclaration": 7689, + "src": "13824:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 8229, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "13804:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13804:42:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13776:70:55" + }, + { + "assignments": [ + 8237 + ], + "declarations": [ + { + "constant": false, + "id": 8237, + "mutability": "mutable", + "name": "tokensPerWeek", + "nodeType": "VariableDeclaration", + "scope": 8330, + "src": "13856:49:55", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "typeName": { + "id": 8236, + "keyType": { + "id": 8234, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13864:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "13856:27:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "valueType": { + "id": 8235, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13875:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + } + ], + "id": 8241, + "initialValue": { + "baseExpression": { + "id": 8238, + "name": "_tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7702, + "src": "13908:14:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(contract IERC20 => mapping(uint256 => uint256))" + } + }, + "id": 8240, + "indexExpression": { + "id": 8239, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "13923:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13908:21:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13856:73:55" + }, + { + "assignments": [ + 8245 + ], + "declarations": [ + { + "constant": false, + "id": 8245, + "mutability": "mutable", + "name": "userBalanceAtTimestamp", + "nodeType": "VariableDeclaration", + "scope": 8330, + "src": "13939:58:55", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "typeName": { + "id": 8244, + "keyType": { + "id": 8242, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13947:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "13939:27:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "valueType": { + "id": 8243, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13958:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + } + ], + "id": 8249, + "initialValue": { + "baseExpression": { + "id": 8246, + "name": "_userBalanceAtTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7719, + "src": "14000:23:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(uint256 => uint256))" + } + }, + "id": 8248, + "indexExpression": { + "id": 8247, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8207, + "src": "14024:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14000:29:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13939:90:55" + }, + { + "assignments": [ + 8251 + ], + "declarations": [ + { + "constant": false, + "id": 8251, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 8330, + "src": "14040:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8250, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14040:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8252, + "nodeType": "VariableDeclarationStatement", + "src": "14040:14:55" + }, + { + "body": { + "id": 8287, + "nodeType": "Block", + "src": "14097:470:55", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8265, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8263, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8221, + "src": "14313:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8264, + "name": "currentActiveWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8228, + "src": "14331:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14313:35:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8267, + "nodeType": "IfStatement", + "src": "14309:46:55", + "trueBody": { + "id": 8266, + "nodeType": "Break", + "src": "14350:5:55" + } + }, + { + "expression": { + "id": 8281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8268, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8251, + "src": "14370:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 8269, + "name": "tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8237, + "src": "14397:13:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8271, + "indexExpression": { + "id": 8270, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8221, + "src": "14411:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14397:29:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "baseExpression": { + "id": 8272, + "name": "userBalanceAtTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8245, + "src": "14429:22:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8274, + "indexExpression": { + "id": 8273, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8221, + "src": "14452:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14429:38:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14397:70:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8276, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14396:72:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "baseExpression": { + "id": 8277, + "name": "_veSupplyCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7685, + "src": "14487:14:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8279, + "indexExpression": { + "id": 8278, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8221, + "src": "14502:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14487:30:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14396:121:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14370:147:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8282, + "nodeType": "ExpressionStatement", + "src": "14370:147:55" + }, + { + "expression": { + "id": 8285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8283, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8221, + "src": "14531:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 8284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14549:7:55", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "14531:25:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8286, + "nodeType": "ExpressionStatement", + "src": "14531:25:55" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8257, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8254, + "src": "14084:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "3230", + "id": 8258, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14088:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_20_by_1", + "typeString": "int_const 20" + }, + "value": "20" + }, + "src": "14084:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8288, + "initializationExpression": { + "assignments": [ + 8254 + ], + "declarations": [ + { + "constant": false, + "id": 8254, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8288, + "src": "14069:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8253, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14069:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8256, + "initialValue": { + "hexValue": "30", + "id": 8255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14081:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "14069:13:55" + }, + "loopExpression": { + "expression": { + "id": 8261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "14092:3:55", + "subExpression": { + "id": 8260, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8254, + "src": "14094:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8262, + "nodeType": "ExpressionStatement", + "src": "14092:3:55" + }, + "nodeType": "ForStatement", + "src": "14064:503:55" + }, + { + "expression": { + "id": 8295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 8289, + "name": "_userTokenTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7725, + "src": "14675:20:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$1650_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => uint256))" + } + }, + "id": 8292, + "indexExpression": { + "id": 8290, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8207, + "src": "14696:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14675:26:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_uint256_$", + "typeString": "mapping(contract IERC20 => uint256)" + } + }, + "id": 8293, + "indexExpression": { + "id": 8291, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "14702:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "14675:33:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8294, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8221, + "src": "14711:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14675:50:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8296, + "nodeType": "ExpressionStatement", + "src": "14675:50:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8297, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8251, + "src": "14740:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8298, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14749:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14740:10:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8327, + "nodeType": "IfStatement", + "src": "14736:331:55", + "trueBody": { + "id": 8326, + "nodeType": "Block", + "src": "14752:315:55", + "statements": [ + { + "expression": { + "id": 8310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8300, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8215, + "src": "14872:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8302, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "cachedBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 7691, + "src": "14872:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8305, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8215, + "src": "14907:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8306, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "cachedBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 7691, + "src": "14907:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8307, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8251, + "src": "14934:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14907:33:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8304, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14899:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint128_$", + "typeString": "type(uint128)" + }, + "typeName": { + "id": 8303, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "14899:7:55", + "typeDescriptions": {} + } + }, + "id": 8309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14899:42:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "src": "14872:69:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "id": 8311, + "nodeType": "ExpressionStatement", + "src": "14872:69:55" + }, + { + "expression": { + "arguments": [ + { + "id": 8315, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8207, + "src": "14974:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8316, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8251, + "src": "14980:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8312, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "14955:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 8314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 4451, + "src": "14955:18:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1650_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 8317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14955:32:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8318, + "nodeType": "ExpressionStatement", + "src": "14955:32:55" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8320, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8207, + "src": "15020:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8321, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "15026:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "id": 8322, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8251, + "src": "15033:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8323, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8221, + "src": "15041:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8319, + "name": "TokensClaimed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 424, + "src": "15006:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$1650_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,contract IERC20,uint256,uint256)" + } + }, + "id": 8324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15006:50:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8325, + "nodeType": "EmitStatement", + "src": "15001:55:55" + } + ] + } + }, + { + "expression": { + "id": 8328, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8251, + "src": "15084:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8213, + "id": 8329, + "nodeType": "Return", + "src": "15077:13:55" + } + ] + }, + "documentation": { + "id": 8205, + "nodeType": "StructuredDocumentation", + "src": "13299:150:55", + "text": " @dev It is required that both the global, token and user state have been properly checkpointed\n before calling this function." + }, + "id": 8331, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_claimToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8207, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 8331, + "src": "13475:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13475:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8209, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 8331, + "src": "13489:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 8208, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "13489:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "13474:28:55" + }, + "returnParameters": { + "id": 8213, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8212, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8331, + "src": "13521:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8211, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13521:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13520:9:55" + }, + "scope": 9062, + "src": "13454:1643:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8598, + "nodeType": "Block", + "src": "15296:4545:55", + "statements": [ + { + "assignments": [ + 8340 + ], + "declarations": [ + { + "constant": false, + "id": 8340, + "mutability": "mutable", + "name": "tokenState", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "15306:29:55", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState" + }, + "typeName": { + "id": 8339, + "name": "TokenState", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7692, + "src": "15306:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState" + } + }, + "visibility": "internal" + } + ], + "id": 8344, + "initialValue": { + "baseExpression": { + "id": 8341, + "name": "_tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7696, + "src": "15338:11:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_TokenState_$7692_storage_$", + "typeString": "mapping(contract IERC20 => struct FeeDistributor.TokenState storage ref)" + } + }, + "id": 8343, + "indexExpression": { + "id": 8342, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8334, + "src": "15350:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "15338:18:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage", + "typeString": "struct FeeDistributor.TokenState storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15306:50:55" + }, + { + "assignments": [ + 8346 + ], + "declarations": [ + { + "constant": false, + "id": 8346, + "mutability": "mutable", + "name": "lastTokenTime", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "15366:21:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15366:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8349, + "initialValue": { + "expression": { + "id": 8347, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8340, + "src": "15390:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8348, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "timeCursor", + "nodeType": "MemberAccess", + "referencedDeclaration": 7689, + "src": "15390:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15366:45:55" + }, + { + "assignments": [ + 8351 + ], + "declarations": [ + { + "constant": false, + "id": 8351, + "mutability": "mutable", + "name": "timeSinceLastCheckpoint", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "15421:31:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8350, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15421:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8352, + "nodeType": "VariableDeclarationStatement", + "src": "15421:31:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8353, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "15466:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8354, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15483:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "15466:18:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8423, + "nodeType": "Block", + "src": "16000:1282:55", + "statements": [ + { + "expression": { + "id": 8387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8382, + "name": "timeSinceLastCheckpoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "16014:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8383, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "16040:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "16040:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8385, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "16058:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16040:31:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16014:57:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8388, + "nodeType": "ExpressionStatement", + "src": "16014:57:55" + }, + { + "condition": { + "id": 8390, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "16090:6:55", + "subExpression": { + "id": 8389, + "name": "force", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8336, + "src": "16091:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8422, + "nodeType": "IfStatement", + "src": "16086:1186:55", + "trueBody": { + "id": 8421, + "nodeType": "Block", + "src": "16098:1174:55", + "statements": [ + { + "assignments": [ + 8392 + ], + "declarations": [ + { + "constant": false, + "id": 8392, + "mutability": "mutable", + "name": "alreadyCheckpointedThisWeek", + "nodeType": "VariableDeclaration", + "scope": 8421, + "src": "16454:32:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8391, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16454:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 8401, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "id": 8394, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "16509:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "16509:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8393, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "16489:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16489:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 8398, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "16569:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8397, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "16549:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16549:34:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16489:94:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16454:129:55" + }, + { + "assignments": [ + 8403 + ], + "declarations": [ + { + "constant": false, + "id": 8403, + "mutability": "mutable", + "name": "nearingEndOfWeek", + "nodeType": "VariableDeclaration", + "scope": 8421, + "src": "16835:21:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8402, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16835:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 8413, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "expression": { + "id": 8405, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "16877:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "16877:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8404, + "name": "_roundUpTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9061, + "src": "16859:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16859:34:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "expression": { + "id": 8408, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "16896:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "16896:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16859:52:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "31", + "id": 8411, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16914:6:55", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "1" + }, + "src": "16859:61:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16835:85:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8414, + "name": "alreadyCheckpointedThisWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8392, + "src": "17161:27:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 8416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "17192:17:55", + "subExpression": { + "id": 8415, + "name": "nearingEndOfWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "17193:16:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "17161:48:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8420, + "nodeType": "IfStatement", + "src": "17157:101:55", + "trueBody": { + "id": 8419, + "nodeType": "Block", + "src": "17211:47:55", + "statements": [ + { + "functionReturnParameters": 8338, + "id": 8418, + "nodeType": "Return", + "src": "17233:7:55" + } + ] + } + } + ] + } + } + ] + }, + "id": 8424, + "nodeType": "IfStatement", + "src": "15462:1820:55", + "trueBody": { + "id": 8381, + "nodeType": "Block", + "src": "15486:508:55", + "statements": [ + { + "expression": { + "id": 8359, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8356, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "15701:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 8357, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "15717:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "15717:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15701:31:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8360, + "nodeType": "ExpressionStatement", + "src": "15701:31:55" + }, + { + "expression": { + "id": 8371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8361, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8340, + "src": "15746:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8363, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "startTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 7687, + "src": "15746:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 8367, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "15796:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "15796:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8366, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "15776:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15776:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8365, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15769:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 8364, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "15769:6:55", + "typeDescriptions": {} + } + }, + "id": 8370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15769:44:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "15746:67:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 8372, + "nodeType": "ExpressionStatement", + "src": "15746:67:55" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8374, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "15914:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "15914:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 8376, + "name": "_startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7679, + "src": "15932:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15914:28:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "46656520646973747269627574696f6e20686173206e6f74207374617274656420796574", + "id": 8378, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15944:38:55", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_47b66ecabfc14b155e7704a5a379d2627d619ee8d9c3fea3fc6f216a8bfd4d76", + "typeString": "literal_string \"Fee distribution has not started yet\"" + }, + "value": "Fee distribution has not started yet" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_47b66ecabfc14b155e7704a5a379d2627d619ee8d9c3fea3fc6f216a8bfd4d76", + "typeString": "literal_string \"Fee distribution has not started yet\"" + } + ], + "id": 8373, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "15906:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15906:77:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8380, + "nodeType": "ExpressionStatement", + "src": "15906:77:55" + } + ] + } + }, + { + "expression": { + "id": 8433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8425, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8340, + "src": "17292:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8427, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "timeCursor", + "nodeType": "MemberAccess", + "referencedDeclaration": 7689, + "src": "17292:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 8430, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "17323:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "17323:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8429, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17316:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 8428, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "17316:6:55", + "typeDescriptions": {} + } + }, + "id": 8432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17316:23:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "17292:47:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 8434, + "nodeType": "ExpressionStatement", + "src": "17292:47:55" + }, + { + "assignments": [ + 8436 + ], + "declarations": [ + { + "constant": false, + "id": 8436, + "mutability": "mutable", + "name": "tokenBalance", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "17350:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8435, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17350:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8444, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 8441, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "17397:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FeeDistributor_$9062", + "typeString": "contract FeeDistributor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_FeeDistributor_$9062", + "typeString": "contract FeeDistributor" + } + ], + "id": 8440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17389:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8439, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17389:7:55", + "typeDescriptions": {} + } + }, + "id": 8442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17389:13:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 8437, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8334, + "src": "17373:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 8438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 1589, + "src": "17373:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 8443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17373:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17350:53:55" + }, + { + "assignments": [ + 8446 + ], + "declarations": [ + { + "constant": false, + "id": 8446, + "mutability": "mutable", + "name": "tokensToDistribute", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "17413:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8445, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17413:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8452, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 8449, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8340, + "src": "17459:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8450, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "cachedBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 7691, + "src": "17459:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "id": 8447, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8436, + "src": "17442:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8448, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 4565, + "src": "17442:16:55", + "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": 8451, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17442:42:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17413:71:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8453, + "name": "tokensToDistribute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8446, + "src": "17498:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8454, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17520:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "17498:23:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8457, + "nodeType": "IfStatement", + "src": "17494:36:55", + "trueBody": { + "functionReturnParameters": 8338, + "id": 8456, + "nodeType": "Return", + "src": "17523:7:55" + } + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8459, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8436, + "src": "17547:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 8462, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17568:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint128_$", + "typeString": "type(uint128)" + }, + "typeName": { + "id": 8461, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "17568:7:55", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint128_$", + "typeString": "type(uint128)" + } + ], + "id": 8460, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "17563:4:55", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 8463, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17563:13:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint128", + "typeString": "type(uint128)" + } + }, + "id": 8464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "17563:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "src": "17547:33:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4d6178696d756d20746f6b656e2062616c616e6365206578636565646564", + "id": 8466, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17582:32:55", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_43f81500ef380474e455ae9052e066306f4e802d2bab24726653d3eca9d31285", + "typeString": "literal_string \"Maximum token balance exceeded\"" + }, + "value": "Maximum token balance exceeded" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_43f81500ef380474e455ae9052e066306f4e802d2bab24726653d3eca9d31285", + "typeString": "literal_string \"Maximum token balance exceeded\"" + } + ], + "id": 8458, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "17539:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17539:76:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8468, + "nodeType": "ExpressionStatement", + "src": "17539:76:55" + }, + { + "expression": { + "id": 8476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8469, + "name": "tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8340, + "src": "17625:10:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage_ptr", + "typeString": "struct FeeDistributor.TokenState storage pointer" + } + }, + "id": 8471, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "cachedBalance", + "nodeType": "MemberAccess", + "referencedDeclaration": 7691, + "src": "17625:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8474, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8436, + "src": "17660:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17652:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint128_$", + "typeString": "type(uint128)" + }, + "typeName": { + "id": 8472, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "17652:7:55", + "typeDescriptions": {} + } + }, + "id": 8475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17652:21:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "src": "17625:48:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "id": 8477, + "nodeType": "ExpressionStatement", + "src": "17625:48:55" + }, + { + "assignments": [ + 8479 + ], + "declarations": [ + { + "constant": false, + "id": 8479, + "mutability": "mutable", + "name": "thisWeek", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "17684:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8478, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17684:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8483, + "initialValue": { + "arguments": [ + { + "id": 8481, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "17723:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8480, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "17703:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17703:34:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17684:53:55" + }, + { + "assignments": [ + 8485 + ], + "declarations": [ + { + "constant": false, + "id": 8485, + "mutability": "mutable", + "name": "nextWeek", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "17747:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8484, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17747:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8487, + "initialValue": { + "hexValue": "30", + "id": 8486, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17766:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "17747:20:55" + }, + { + "assignments": [ + 8491 + ], + "declarations": [ + { + "constant": false, + "id": 8491, + "mutability": "mutable", + "name": "tokensPerWeek", + "nodeType": "VariableDeclaration", + "scope": 8598, + "src": "17990:49:55", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "typeName": { + "id": 8490, + "keyType": { + "id": 8488, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17998:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "17990:27:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "valueType": { + "id": 8489, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18009:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + } + ], + "id": 8495, + "initialValue": { + "baseExpression": { + "id": 8492, + "name": "_tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7702, + "src": "18042:14:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(contract IERC20 => mapping(uint256 => uint256))" + } + }, + "id": 8494, + "indexExpression": { + "id": 8493, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8334, + "src": "18057:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "18042:21:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17990:73:55" + }, + { + "body": { + "id": 8590, + "nodeType": "Block", + "src": "18106:1654:55", + "statements": [ + { + "expression": { + "id": 8510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8506, + "name": "nextWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8485, + "src": "18183:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8507, + "name": "thisWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8479, + "src": "18194:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 8508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18205:7:55", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "18194:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18183:29:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8511, + "nodeType": "ExpressionStatement", + "src": "18183:29:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8512, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "18230:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "18230:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 8514, + "name": "nextWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8485, + "src": "18248:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18230:26:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8580, + "nodeType": "Block", + "src": "18935:629:55", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8550, + "name": "timeSinceLastCheckpoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "19077:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8551, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19104:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "19077:28:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8553, + "name": "nextWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8485, + "src": "19109:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 8554, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "19121:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19109:25:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "19077:57:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8578, + "nodeType": "Block", + "src": "19296:254:55", + "statements": [ + { + "expression": { + "id": 8576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 8564, + "name": "tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8491, + "src": "19381:13:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8566, + "indexExpression": { + "id": 8565, + "name": "thisWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8479, + "src": "19395:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "19381:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8572, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8567, + "name": "tokensToDistribute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8446, + "src": "19433:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8568, + "name": "nextWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8485, + "src": "19455:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8569, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "19466:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19455:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8571, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "19454:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19433:47:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8573, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "19432:49:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8574, + "name": "timeSinceLastCheckpoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "19508:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19432:99:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19381:150:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8577, + "nodeType": "ExpressionStatement", + "src": "19381:150:55" + } + ] + }, + "id": 8579, + "nodeType": "IfStatement", + "src": "19073:477:55", + "trueBody": { + "id": 8563, + "nodeType": "Block", + "src": "19136:154:55", + "statements": [ + { + "expression": { + "id": 8561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 8557, + "name": "tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8491, + "src": "19226:13:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8559, + "indexExpression": { + "id": 8558, + "name": "thisWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8479, + "src": "19240:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "19226:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8560, + "name": "tokensToDistribute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8446, + "src": "19253:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19226:45:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8562, + "nodeType": "ExpressionStatement", + "src": "19226:45:55" + } + ] + } + } + ] + }, + "id": 8581, + "nodeType": "IfStatement", + "src": "18226:1338:55", + "trueBody": { + "id": 8549, + "nodeType": "Block", + "src": "18258:671:55", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8516, + "name": "timeSinceLastCheckpoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "18386:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18413:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "18386:28:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8519, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "18418:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8520, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "18418:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 8521, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "18437:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18418:32:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "18386:64:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8546, + "nodeType": "Block", + "src": "18544:269:55", + "statements": [ + { + "expression": { + "id": 8544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 8531, + "name": "tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8491, + "src": "18637:13:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8533, + "indexExpression": { + "id": 8532, + "name": "thisWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8479, + "src": "18651:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "18637:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8534, + "name": "tokensToDistribute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8446, + "src": "18689:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8538, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8535, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "18711:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "18711:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8537, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "18729:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18711:31:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8539, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18710:33:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18689:54:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8541, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18688:56:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8542, + "name": "timeSinceLastCheckpoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "18771:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18688:106:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18637:157:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8545, + "nodeType": "ExpressionStatement", + "src": "18637:157:55" + } + ] + }, + "id": 8547, + "nodeType": "IfStatement", + "src": "18382:431:55", + "trueBody": { + "id": 8530, + "nodeType": "Block", + "src": "18452:86:55", + "statements": [ + { + "expression": { + "id": 8528, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 8524, + "name": "tokensPerWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8491, + "src": "18474:13:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8526, + "indexExpression": { + "id": 8525, + "name": "thisWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8479, + "src": "18488:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "18474:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8527, + "name": "tokensToDistribute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8446, + "src": "18501:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18474:45:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8529, + "nodeType": "ExpressionStatement", + "src": "18474:45:55" + } + ] + } + }, + { + "id": 8548, + "nodeType": "Break", + "src": "18909:5:55" + } + ] + } + }, + { + "expression": { + "id": 8584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8582, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "19692:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8583, + "name": "nextWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8485, + "src": "19708:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19692:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8585, + "nodeType": "ExpressionStatement", + "src": "19692:24:55" + }, + { + "expression": { + "id": 8588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8586, + "name": "thisWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8479, + "src": "19730:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8587, + "name": "nextWeek", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8485, + "src": "19741:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19730:19:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8589, + "nodeType": "ExpressionStatement", + "src": "19730:19:55" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8500, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8497, + "src": "18093:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "3230", + "id": 8501, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18097:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_20_by_1", + "typeString": "int_const 20" + }, + "value": "20" + }, + "src": "18093:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8591, + "initializationExpression": { + "assignments": [ + 8497 + ], + "declarations": [ + { + "constant": false, + "id": 8497, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8591, + "src": "18078:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8496, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18078:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8499, + "initialValue": { + "hexValue": "30", + "id": 8498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18090:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "18078:13:55" + }, + "loopExpression": { + "expression": { + "id": 8504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "18101:3:55", + "subExpression": { + "id": 8503, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8497, + "src": "18103:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8505, + "nodeType": "ExpressionStatement", + "src": "18101:3:55" + }, + "nodeType": "ForStatement", + "src": "18073:1687:55" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8593, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8334, + "src": "19793:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "id": 8594, + "name": "tokensToDistribute", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8446, + "src": "19800:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8595, + "name": "lastTokenTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8346, + "src": "19820:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8592, + "name": "TokenCheckpointed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 414, + "src": "19775:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20_$1650_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,uint256,uint256)" + } + }, + "id": 8596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19775:59:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8597, + "nodeType": "EmitStatement", + "src": "19770:64:55" + } + ] + }, + "documentation": { + "id": 8332, + "nodeType": "StructuredDocumentation", + "src": "15103:127:55", + "text": " @dev Calculate the amount of `token` to be distributed to `_votingEscrow` holders since the last checkpoint." + }, + "id": 8599, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkpointToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8337, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8334, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 8599, + "src": "15261:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 8333, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "15261:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8336, + "mutability": "mutable", + "name": "force", + "nodeType": "VariableDeclaration", + "scope": 8599, + "src": "15275:10:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8335, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15275:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "15260:26:55" + }, + "returnParameters": { + "id": 8338, + "nodeType": "ParameterList", + "parameters": [], + "src": "15296:0:55" + }, + "scope": 9062, + "src": "15235:4606:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8851, + "nodeType": "Block", + "src": "20010:4139:55", + "statements": [ + { + "assignments": [ + 8606 + ], + "declarations": [ + { + "constant": false, + "id": 8606, + "mutability": "mutable", + "name": "maxUserEpoch", + "nodeType": "VariableDeclaration", + "scope": 8851, + "src": "20020:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8605, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20020:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8611, + "initialValue": { + "arguments": [ + { + "id": 8609, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8602, + "src": "20074:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 8607, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "20043:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 8608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "user_point_epoch", + "nodeType": "MemberAccess", + "referencedDeclaration": 997, + "src": "20043:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 8610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20043:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20020:59:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8612, + "name": "maxUserEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8606, + "src": "20214:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20230:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "20214:17:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8616, + "nodeType": "IfStatement", + "src": "20210:30:55", + "trueBody": { + "functionReturnParameters": 8604, + "id": 8615, + "nodeType": "Return", + "src": "20233:7:55" + } + }, + { + "assignments": [ + 8618 + ], + "declarations": [ + { + "constant": false, + "id": 8618, + "mutability": "mutable", + "name": "userState", + "nodeType": "VariableDeclaration", + "scope": 8851, + "src": "20250:27:55", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState" + }, + "typeName": { + "id": 8617, + "name": "UserState", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7709, + "src": "20250:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState" + } + }, + "visibility": "internal" + } + ], + "id": 8622, + "initialValue": { + "baseExpression": { + "id": 8619, + "name": "_userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7713, + "src": "20280:10:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserState_$7709_storage_$", + "typeString": "mapping(address => struct FeeDistributor.UserState storage ref)" + } + }, + "id": 8621, + "indexExpression": { + "id": 8620, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8602, + "src": "20291:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "20280:16:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage", + "typeString": "struct FeeDistributor.UserState storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20250:46:55" + }, + { + "assignments": [ + 8624 + ], + "declarations": [ + { + "constant": false, + "id": 8624, + "mutability": "mutable", + "name": "weekCursor", + "nodeType": "VariableDeclaration", + "scope": 8851, + "src": "20461:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8623, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20461:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8627, + "initialValue": { + "expression": { + "id": 8625, + "name": "userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8618, + "src": "20482:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState storage pointer" + } + }, + "id": 8626, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "timeCursor", + "nodeType": "MemberAccess", + "referencedDeclaration": 7706, + "src": "20482:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20461:41:55" + }, + { + "assignments": [ + 8629 + ], + "declarations": [ + { + "constant": false, + "id": 8629, + "mutability": "mutable", + "name": "userEpoch", + "nodeType": "VariableDeclaration", + "scope": 8851, + "src": "20513:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8628, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20513:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8630, + "nodeType": "VariableDeclarationStatement", + "src": "20513:17:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8631, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "20544:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8632, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20558:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "20544:15:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8657, + "nodeType": "Block", + "src": "20740:319:55", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8643, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "20758:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "expression": { + "id": 8645, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "20792:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "20792:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8644, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "20772:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20772:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20758:50:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8651, + "nodeType": "IfStatement", + "src": "20754:178:55", + "trueBody": { + "id": 8650, + "nodeType": "Block", + "src": "20810:122:55", + "statements": [ + { + "functionReturnParameters": 8604, + "id": 8649, + "nodeType": "Return", + "src": "20911:7:55" + } + ] + } + }, + { + "expression": { + "id": 8655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8652, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "21005:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 8653, + "name": "userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8618, + "src": "21017:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState storage pointer" + } + }, + "id": 8654, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastEpochCheckpointed", + "nodeType": "MemberAccess", + "referencedDeclaration": 7708, + "src": "21017:31:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "src": "21005:43:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8656, + "nodeType": "ExpressionStatement", + "src": "21005:43:55" + } + ] + }, + "id": 8658, + "nodeType": "IfStatement", + "src": "20540:519:55", + "trueBody": { + "id": 8642, + "nodeType": "Block", + "src": "20561:173:55", + "statements": [ + { + "expression": { + "id": 8640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8634, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "20656:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8636, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8602, + "src": "20692:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8637, + "name": "_startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7679, + "src": "20698:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8638, + "name": "maxUserEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8606, + "src": "20710:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8635, + "name": "_findTimestampUserEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9028, + "src": "20668:23:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (address,uint256,uint256) view returns (uint256)" + } + }, + "id": 8639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20668:55:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20656:67:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8641, + "nodeType": "ExpressionStatement", + "src": "20656:67:55" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8659, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "21169:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8660, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21182:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "21169:14:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8667, + "nodeType": "IfStatement", + "src": "21165:58:55", + "trueBody": { + "id": 8666, + "nodeType": "Block", + "src": "21185:38:55", + "statements": [ + { + "expression": { + "id": 8664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8662, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "21199:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "31", + "id": 8663, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21211:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "21199:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8665, + "nodeType": "ExpressionStatement", + "src": "21199:13:55" + } + ] + } + }, + { + "assignments": [ + 8671 + ], + "declarations": [ + { + "constant": false, + "id": 8671, + "mutability": "mutable", + "name": "userPoint", + "nodeType": "VariableDeclaration", + "scope": 8851, + "src": "21233:36:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point" + }, + "typeName": { + "id": 8670, + "name": "IVotingEscrow.Point", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 978, + "src": "21233:19:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_storage_ptr", + "typeString": "struct IVotingEscrow.Point" + } + }, + "visibility": "internal" + } + ], + "id": 8677, + "initialValue": { + "arguments": [ + { + "id": 8674, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8602, + "src": "21305:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8675, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "21311:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8672, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "21272:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 8673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "user_point_history", + "nodeType": "MemberAccess", + "referencedDeclaration": 1013, + "src": "21272:32:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_struct$_Point_$978_memory_ptr_$", + "typeString": "function (address,uint256) view external returns (struct IVotingEscrow.Point memory)" + } + }, + "id": 8676, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21272:49:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21233:88:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8678, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "21596:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8679, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21610:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "21596:15:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8702, + "nodeType": "IfStatement", + "src": "21592:166:55", + "trueBody": { + "id": 8701, + "nodeType": "Block", + "src": "21613:145:55", + "statements": [ + { + "expression": { + "id": 8690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8681, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "21627:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8684, + "name": "_startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7679, + "src": "21649:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "expression": { + "id": 8686, + "name": "userPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "21679:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8687, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "ts", + "nodeType": "MemberAccess", + "referencedDeclaration": 975, + "src": "21679:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8685, + "name": "_roundUpTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9061, + "src": "21661:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8688, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21661:31:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8682, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2884, + "src": "21640:4:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$2884_$", + "typeString": "type(library Math)" + } + }, + "id": 8683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "referencedDeclaration": 2753, + "src": "21640:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21640:53:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "21627:66:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8691, + "nodeType": "ExpressionStatement", + "src": "21627:66:55" + }, + { + "expression": { + "id": 8699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8692, + "name": "userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8618, + "src": "21707:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState storage pointer" + } + }, + "id": 8694, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "startTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 7704, + "src": "21707:19:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8697, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "21736:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8696, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21729:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 8695, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "21729:6:55", + "typeDescriptions": {} + } + }, + "id": 8698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21729:18:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "21707:40:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 8700, + "nodeType": "ExpressionStatement", + "src": "21707:40:55" + } + ] + } + }, + { + "assignments": [ + 8706 + ], + "declarations": [ + { + "constant": false, + "id": 8706, + "mutability": "mutable", + "name": "oldUserPoint", + "nodeType": "VariableDeclaration", + "scope": 8851, + "src": "21958:39:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point" + }, + "typeName": { + "id": 8705, + "name": "IVotingEscrow.Point", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 978, + "src": "21958:19:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_storage_ptr", + "typeString": "struct IVotingEscrow.Point" + } + }, + "visibility": "internal" + } + ], + "id": 8707, + "nodeType": "VariableDeclarationStatement", + "src": "21958:39:55" + }, + { + "body": { + "id": 8829, + "nodeType": "Block", + "src": "22040:1944:55", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8718, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "22152:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 8719, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "22165:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "22165:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "22152:28:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8724, + "nodeType": "IfStatement", + "src": "22148:72:55", + "trueBody": { + "id": 8723, + "nodeType": "Block", + "src": "22182:38:55", + "statements": [ + { + "id": 8722, + "nodeType": "Break", + "src": "22200:5:55" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8725, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "22238:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "expression": { + "id": 8726, + "name": "userPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "22252:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8727, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "ts", + "nodeType": "MemberAccess", + "referencedDeclaration": 975, + "src": "22252:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "22238:26:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8729, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "22268:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 8730, + "name": "maxUserEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8606, + "src": "22281:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "22268:25:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "22238:55:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8827, + "nodeType": "Block", + "src": "23060:914:55", + "statements": [ + { + "assignments": [ + 8767 + ], + "declarations": [ + { + "constant": false, + "id": 8767, + "mutability": "mutable", + "name": "dt", + "nodeType": "VariableDeclaration", + "scope": 8827, + "src": "23279:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 8766, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "23279:6:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + } + ], + "id": 8775, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8770, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "23298:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "expression": { + "id": 8771, + "name": "oldUserPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8706, + "src": "23311:12:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8772, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "ts", + "nodeType": "MemberAccess", + "referencedDeclaration": 975, + "src": "23311:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23298:28:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8769, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23291:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int128_$", + "typeString": "type(int128)" + }, + "typeName": { + "id": 8768, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "23291:6:55", + "typeDescriptions": {} + } + }, + "id": 8774, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23291:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23279:48:55" + }, + { + "assignments": [ + 8777 + ], + "declarations": [ + { + "constant": false, + "id": 8777, + "mutability": "mutable", + "name": "userBalance", + "nodeType": "VariableDeclaration", + "scope": 8827, + "src": "23345:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8776, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23345:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8797, + "initialValue": { + "condition": { + "commonType": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "id": 8784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8778, + "name": "oldUserPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8706, + "src": "23367:12:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8779, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "bias", + "nodeType": "MemberAccess", + "referencedDeclaration": 971, + "src": "23367:17:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "id": 8783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8780, + "name": "oldUserPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8706, + "src": "23387:12:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8781, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "slope", + "nodeType": "MemberAccess", + "referencedDeclaration": 973, + "src": "23387:18:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8782, + "name": "dt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8767, + "src": "23408:2:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "src": "23387:23:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "src": "23367:43:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 8795, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23508:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 8796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "23367:142:55", + "trueExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "id": 8793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8787, + "name": "oldUserPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8706, + "src": "23441:12:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8788, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "bias", + "nodeType": "MemberAccess", + "referencedDeclaration": 971, + "src": "23441:17:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "id": 8792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8789, + "name": "oldUserPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8706, + "src": "23461:12:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "slope", + "nodeType": "MemberAccess", + "referencedDeclaration": 973, + "src": "23461:18:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8791, + "name": "dt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8767, + "src": "23482:2:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "src": "23461:23:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "src": "23441:43:55", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + ], + "id": 8786, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23433:7:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 8785, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23433:7:55", + "typeDescriptions": {} + } + }, + "id": 8794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23433:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23345:164:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8798, + "name": "userBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8777, + "src": "23606:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8799, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23621:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "23606:16:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8801, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "23626:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 8802, + "name": "maxUserEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8606, + "src": "23638:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23626:24:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "23606:44:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8814, + "nodeType": "IfStatement", + "src": "23602:165:55", + "trueBody": { + "id": 8813, + "nodeType": "Block", + "src": "23652:115:55", + "statements": [ + { + "expression": { + "id": 8810, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8805, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "23674:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 8807, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "23705:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "23705:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8806, + "name": "_roundUpTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9061, + "src": "23687:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23687:34:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23674:47:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8811, + "nodeType": "ExpressionStatement", + "src": "23674:47:55" + }, + { + "id": 8812, + "nodeType": "Break", + "src": "23743:5:55" + } + ] + } + }, + { + "expression": { + "id": 8821, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 8815, + "name": "_userBalanceAtTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7719, + "src": "23864:23:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(uint256 => uint256))" + } + }, + "id": 8818, + "indexExpression": { + "id": 8816, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8602, + "src": "23888:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "23864:29:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8819, + "indexExpression": { + "id": 8817, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "23894:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "23864:41:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8820, + "name": "userBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8777, + "src": "23908:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23864:55:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8822, + "nodeType": "ExpressionStatement", + "src": "23864:55:55" + }, + { + "expression": { + "id": 8825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8823, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "23938:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 8824, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23952:7:55", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "23938:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8826, + "nodeType": "ExpressionStatement", + "src": "23938:21:55" + } + ] + }, + "id": 8828, + "nodeType": "IfStatement", + "src": "22234:1740:55", + "trueBody": { + "id": 8765, + "nodeType": "Block", + "src": "22295:759:55", + "statements": [ + { + "expression": { + "id": 8735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8733, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "22744:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 8734, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22757:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "22744:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8736, + "nodeType": "ExpressionStatement", + "src": "22744:14:55" + }, + { + "expression": { + "id": 8739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8737, + "name": "oldUserPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8706, + "src": "22776:12:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8738, + "name": "userPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "22791:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "src": "22776:24:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8740, + "nodeType": "ExpressionStatement", + "src": "22776:24:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8741, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "22822:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 8742, + "name": "maxUserEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8606, + "src": "22834:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "22822:24:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8763, + "nodeType": "Block", + "src": "22938:102:55", + "statements": [ + { + "expression": { + "id": 8761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8755, + "name": "userPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "22960:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8758, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8602, + "src": "23005:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8759, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "23011:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8756, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "22972:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 8757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "user_point_history", + "nodeType": "MemberAccess", + "referencedDeclaration": 1013, + "src": "22972:32:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_struct$_Point_$978_memory_ptr_$", + "typeString": "function (address,uint256) view external returns (struct IVotingEscrow.Point memory)" + } + }, + "id": 8760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22972:49:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "src": "22960:61:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8762, + "nodeType": "ExpressionStatement", + "src": "22960:61:55" + } + ] + }, + "id": 8764, + "nodeType": "IfStatement", + "src": "22818:222:55", + "trueBody": { + "id": 8754, + "nodeType": "Block", + "src": "22848:84:55", + "statements": [ + { + "expression": { + "id": 8752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8744, + "name": "userPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "22870:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "30", + "id": 8747, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22902:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8748, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22905:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8749, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22908:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8750, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22911:1:55", + "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" + } + ], + "expression": { + "id": 8745, + "name": "IVotingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1035, + "src": "22882:13:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVotingEscrow_$1035_$", + "typeString": "type(contract IVotingEscrow)" + } + }, + "id": 8746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Point", + "nodeType": "MemberAccess", + "referencedDeclaration": 978, + "src": "22882:19:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Point_$978_storage_ptr_$", + "typeString": "type(struct IVotingEscrow.Point storage pointer)" + } + }, + "id": 8751, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22882:31:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "src": "22870:43:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 8753, + "nodeType": "ExpressionStatement", + "src": "22870:43:55" + } + ] + } + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8712, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "22027:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "3530", + "id": 8713, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22031:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "src": "22027:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8830, + "initializationExpression": { + "assignments": [ + 8709 + ], + "declarations": [ + { + "constant": false, + "id": 8709, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8830, + "src": "22012:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22012:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8711, + "initialValue": { + "hexValue": "30", + "id": 8710, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22024:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "22012:13:55" + }, + "loopExpression": { + "expression": { + "id": 8716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "22035:3:55", + "subExpression": { + "id": 8715, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "22037:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8717, + "nodeType": "ExpressionStatement", + "src": "22035:3:55" + }, + "nodeType": "ForStatement", + "src": "22007:1977:55" + }, + { + "expression": { + "id": 8840, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8831, + "name": "userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8618, + "src": "24036:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState storage pointer" + } + }, + "id": 8833, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "lastEpochCheckpointed", + "nodeType": "MemberAccess", + "referencedDeclaration": 7708, + "src": "24036:31:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8836, + "name": "userEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "24077:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 8837, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24089:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "24077:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8835, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24070:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 8834, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "24070:6:55", + "typeDescriptions": {} + } + }, + "id": 8839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24070:21:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "24036:55:55", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "id": 8841, + "nodeType": "ExpressionStatement", + "src": "24036:55:55" + }, + { + "expression": { + "id": 8849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 8842, + "name": "userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8618, + "src": "24101:9:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage_ptr", + "typeString": "struct FeeDistributor.UserState storage pointer" + } + }, + "id": 8844, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "timeCursor", + "nodeType": "MemberAccess", + "referencedDeclaration": 7706, + "src": "24101:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8847, + "name": "weekCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8624, + "src": "24131:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8846, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24124:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 8845, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "24124:6:55", + "typeDescriptions": {} + } + }, + "id": 8848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24124:18:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "24101:41:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 8850, + "nodeType": "ExpressionStatement", + "src": "24101:41:55" + } + ] + }, + "documentation": { + "id": 8600, + "nodeType": "StructuredDocumentation", + "src": "19847:103:55", + "text": " @dev Cache the `user`'s balance of `_votingEscrow` at the beginning of each new week" + }, + "id": 8852, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkpointUserBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8603, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8602, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 8852, + "src": "19987:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8601, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19987:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "19986:14:55" + }, + "returnParameters": { + "id": 8604, + "nodeType": "ParameterList", + "parameters": [], + "src": "20010:0:55" + }, + "scope": 9062, + "src": "19955:4194:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8912, + "nodeType": "Block", + "src": "24304:879:55", + "statements": [ + { + "assignments": [ + 8857 + ], + "declarations": [ + { + "constant": false, + "id": 8857, + "mutability": "mutable", + "name": "timeCursor", + "nodeType": "VariableDeclaration", + "scope": 8912, + "src": "24314:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8856, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24314:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8859, + "initialValue": { + "id": 8858, + "name": "_timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7681, + "src": "24335:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24314:32:55" + }, + { + "assignments": [ + 8861 + ], + "declarations": [ + { + "constant": false, + "id": 8861, + "mutability": "mutable", + "name": "weekStart", + "nodeType": "VariableDeclaration", + "scope": 8912, + "src": "24356:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8860, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24356:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8866, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 8863, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "24396:5:55", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 8864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "24396:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8862, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "24376:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 8865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24376:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24356:56:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8867, + "name": "timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8857, + "src": "24507:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 8868, + "name": "weekStart", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8861, + "src": "24520:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "24507:22:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8872, + "nodeType": "IfStatement", + "src": "24503:141:55", + "trueBody": { + "id": 8871, + "nodeType": "Block", + "src": "24531:113:55", + "statements": [ + { + "functionReturnParameters": 8855, + "id": 8870, + "nodeType": "Return", + "src": "24627:7:55" + } + ] + } + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 8873, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "24654:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 8875, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "checkpoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 1016, + "src": "24654:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", + "typeString": "function () external" + } + }, + "id": 8876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24654:26:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8877, + "nodeType": "ExpressionStatement", + "src": "24654:26:55" + }, + { + "body": { + "id": 8906, + "nodeType": "Block", + "src": "24827:237:55", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8890, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8888, + "name": "timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8857, + "src": "24845:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 8889, + "name": "weekStart", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8861, + "src": "24858:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "24845:22:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8892, + "nodeType": "IfStatement", + "src": "24841:33:55", + "trueBody": { + "id": 8891, + "nodeType": "Break", + "src": "24869:5:55" + } + }, + { + "expression": { + "id": 8900, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 8893, + "name": "_veSupplyCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7685, + "src": "24889:14:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 8895, + "indexExpression": { + "id": 8894, + "name": "timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8857, + "src": "24904:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "24889:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8898, + "name": "timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8857, + "src": "24944:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8896, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "24918:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 8897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "totalSupply", + "nodeType": "MemberAccess", + "referencedDeclaration": 990, + "src": "24918:25:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view external returns (uint256)" + } + }, + "id": 8899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24918:37:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "24889:66:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8901, + "nodeType": "ExpressionStatement", + "src": "24889:66:55" + }, + { + "expression": { + "id": 8904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8902, + "name": "timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8857, + "src": "25032:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 8903, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25046:7:55", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "25032:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8905, + "nodeType": "ExpressionStatement", + "src": "25032:21:55" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8884, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8882, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8879, + "src": "24814:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "3230", + "id": 8883, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24818:2:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_20_by_1", + "typeString": "int_const 20" + }, + "value": "20" + }, + "src": "24814:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8907, + "initializationExpression": { + "assignments": [ + 8879 + ], + "declarations": [ + { + "constant": false, + "id": 8879, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8907, + "src": "24799:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8878, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24799:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8881, + "initialValue": { + "hexValue": "30", + "id": 8880, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24811:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "24799:13:55" + }, + "loopExpression": { + "expression": { + "id": 8886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "24822:3:55", + "subExpression": { + "id": 8885, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8879, + "src": "24824:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8887, + "nodeType": "ExpressionStatement", + "src": "24822:3:55" + }, + "nodeType": "ForStatement", + "src": "24794:270:55" + }, + { + "expression": { + "id": 8910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8908, + "name": "_timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7681, + "src": "25152:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8909, + "name": "timeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8857, + "src": "25166:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "25152:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8911, + "nodeType": "ExpressionStatement", + "src": "25152:24:55" + } + ] + }, + "documentation": { + "id": 8853, + "nodeType": "StructuredDocumentation", + "src": "24155:101:55", + "text": " @dev Cache the totalSupply of VotingEscrow token at the beginning of each new week" + }, + "id": 8913, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkpointTotalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8854, + "nodeType": "ParameterList", + "parameters": [], + "src": "24292:2:55" + }, + "returnParameters": { + "id": 8855, + "nodeType": "ParameterList", + "parameters": [], + "src": "24304:0:55" + }, + "scope": 9062, + "src": "24261:922:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8949, + "nodeType": "Block", + "src": "25486:414:55", + "statements": [ + { + "assignments": [ + 8924 + ], + "declarations": [ + { + "constant": false, + "id": 8924, + "mutability": "mutable", + "name": "userTimeCursor", + "nodeType": "VariableDeclaration", + "scope": 8949, + "src": "25496:22:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8923, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25496:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8930, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 8925, + "name": "_userTokenTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7725, + "src": "25521:20:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$1650_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => uint256))" + } + }, + "id": 8927, + "indexExpression": { + "id": 8926, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8916, + "src": "25542:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "25521:26:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_uint256_$", + "typeString": "mapping(contract IERC20 => uint256)" + } + }, + "id": 8929, + "indexExpression": { + "id": 8928, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8918, + "src": "25548:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "25521:33:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "25496:58:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8931, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8924, + "src": "25568:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8932, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25585:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "25568:18:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8936, + "nodeType": "IfStatement", + "src": "25564:45:55", + "trueBody": { + "expression": { + "id": 8934, + "name": "userTimeCursor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8924, + "src": "25595:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8922, + "id": 8935, + "nodeType": "Return", + "src": "25588:21:55" + } + }, + { + "expression": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 8939, + "name": "_userState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7713, + "src": "25836:10:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserState_$7709_storage_$", + "typeString": "mapping(address => struct FeeDistributor.UserState storage ref)" + } + }, + "id": 8941, + "indexExpression": { + "id": 8940, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8916, + "src": "25847:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "25836:16:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserState_$7709_storage", + "typeString": "struct FeeDistributor.UserState storage ref" + } + }, + "id": 8942, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "startTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 7704, + "src": "25836:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "expression": { + "baseExpression": { + "id": 8943, + "name": "_tokenState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7696, + "src": "25864:11:55", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_TokenState_$7692_storage_$", + "typeString": "mapping(contract IERC20 => struct FeeDistributor.TokenState storage ref)" + } + }, + "id": 8945, + "indexExpression": { + "id": 8944, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8918, + "src": "25876:5:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "25864:18:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenState_$7692_storage", + "typeString": "struct FeeDistributor.TokenState storage ref" + } + }, + "id": 8946, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "startTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 7687, + "src": "25864:28:55", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 8937, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2884, + "src": "25827:4:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$2884_$", + "typeString": "type(library Math)" + } + }, + "id": 8938, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "referencedDeclaration": 2753, + "src": "25827:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8947, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25827:66:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8922, + "id": 8948, + "nodeType": "Return", + "src": "25820:73:55" + } + ] + }, + "documentation": { + "id": 8914, + "nodeType": "StructuredDocumentation", + "src": "25214:174:55", + "text": " @dev Wrapper around `_userTokenTimeCursor` which returns the start timestamp for `token`\n if `user` has not attempted to interact with it previously." + }, + "id": 8950, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getUserTokenTimeCursor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8919, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8916, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 8950, + "src": "25426:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8915, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25426:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8918, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 8950, + "src": "25440:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 8917, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "25440:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "25425:28:55" + }, + "returnParameters": { + "id": 8922, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8921, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8950, + "src": "25477:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8920, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25477:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "25476:9:55" + }, + "scope": 9062, + "src": "25393:507:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9027, + "nodeType": "Block", + "src": "26166:728:55", + "statements": [ + { + "assignments": [ + 8963 + ], + "declarations": [ + { + "constant": false, + "id": 8963, + "mutability": "mutable", + "name": "min", + "nodeType": "VariableDeclaration", + "scope": 9027, + "src": "26176:11:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8962, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26176:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8965, + "initialValue": { + "hexValue": "30", + "id": 8964, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26190:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "26176:15:55" + }, + { + "assignments": [ + 8967 + ], + "declarations": [ + { + "constant": false, + "id": 8967, + "mutability": "mutable", + "name": "max", + "nodeType": "VariableDeclaration", + "scope": 9027, + "src": "26201:11:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8966, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26201:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8969, + "initialValue": { + "id": 8968, + "name": "maxUserEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8957, + "src": "26215:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26201:26:55" + }, + { + "body": { + "id": 9023, + "nodeType": "Block", + "src": "26357:511:55", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8980, + "name": "min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8963, + "src": "26375:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8981, + "name": "max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8967, + "src": "26382:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26375:10:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8984, + "nodeType": "IfStatement", + "src": "26371:21:55", + "trueBody": { + "id": 8983, + "nodeType": "Break", + "src": "26387:5:55" + } + }, + { + "assignments": [ + 8986 + ], + "declarations": [ + { + "constant": false, + "id": 8986, + "mutability": "mutable", + "name": "mid", + "nodeType": "VariableDeclaration", + "scope": 9023, + "src": "26558:11:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8985, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26558:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8995, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8991, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8989, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8987, + "name": "min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8963, + "src": "26573:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8988, + "name": "max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8967, + "src": "26579:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26573:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "32", + "id": 8990, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26585:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "26573:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8992, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "26572:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "32", + "id": 8993, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26590:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "26572:19:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26558:33:55" + }, + { + "assignments": [ + 8999 + ], + "declarations": [ + { + "constant": false, + "id": 8999, + "mutability": "mutable", + "name": "pt", + "nodeType": "VariableDeclaration", + "scope": 9023, + "src": "26605:29:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point" + }, + "typeName": { + "id": 8998, + "name": "IVotingEscrow.Point", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 978, + "src": "26605:19:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_storage_ptr", + "typeString": "struct IVotingEscrow.Point" + } + }, + "visibility": "internal" + } + ], + "id": 9005, + "initialValue": { + "arguments": [ + { + "id": 9002, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8953, + "src": "26670:4:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9003, + "name": "mid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8986, + "src": "26676:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9000, + "name": "_votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7677, + "src": "26637:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 9001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "user_point_history", + "nodeType": "MemberAccess", + "referencedDeclaration": 1013, + "src": "26637:32:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_struct$_Point_$978_memory_ptr_$", + "typeString": "function (address,uint256) view external returns (struct IVotingEscrow.Point memory)" + } + }, + "id": 9004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26637:43:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26605:75:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9009, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9006, + "name": "pt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8999, + "src": "26698:2:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Point_$978_memory_ptr", + "typeString": "struct IVotingEscrow.Point memory" + } + }, + "id": 9007, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "ts", + "nodeType": "MemberAccess", + "referencedDeclaration": 975, + "src": "26698:5:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 9008, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8955, + "src": "26707:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26698:18:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9021, + "nodeType": "Block", + "src": "26766:92:55", + "statements": [ + { + "expression": { + "id": 9019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9015, + "name": "max", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8967, + "src": "26830:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9018, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9016, + "name": "mid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8986, + "src": "26836:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 9017, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26842:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "26836:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26830:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9020, + "nodeType": "ExpressionStatement", + "src": "26830:13:55" + } + ] + }, + "id": 9022, + "nodeType": "IfStatement", + "src": "26694:164:55", + "trueBody": { + "id": 9014, + "nodeType": "Block", + "src": "26718:42:55", + "statements": [ + { + "expression": { + "id": 9012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9010, + "name": "min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8963, + "src": "26736:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9011, + "name": "mid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8986, + "src": "26742:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26736:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9013, + "nodeType": "ExpressionStatement", + "src": "26736:9:55" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8974, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8971, + "src": "26343:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "313238", + "id": 8975, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26347:3:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_128_by_1", + "typeString": "int_const 128" + }, + "value": "128" + }, + "src": "26343:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9024, + "initializationExpression": { + "assignments": [ + 8971 + ], + "declarations": [ + { + "constant": false, + "id": 8971, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 9024, + "src": "26328:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8970, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26328:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8973, + "initialValue": { + "hexValue": "30", + "id": 8972, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26340:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "26328:13:55" + }, + "loopExpression": { + "expression": { + "id": 8978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "26352:3:55", + "subExpression": { + "id": 8977, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8971, + "src": "26354:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8979, + "nodeType": "ExpressionStatement", + "src": "26352:3:55" + }, + "nodeType": "ForStatement", + "src": "26323:545:55" + }, + { + "expression": { + "id": 9025, + "name": "min", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8963, + "src": "26884:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8961, + "id": 9026, + "nodeType": "Return", + "src": "26877:10:55" + } + ] + }, + "documentation": { + "id": 8951, + "nodeType": "StructuredDocumentation", + "src": "25906:105:55", + "text": " @dev Return the user epoch number for `user` corresponding to the provided `timestamp`" + }, + "id": 9028, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_findTimestampUserEpoch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8958, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8953, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 9028, + "src": "26058:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8952, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26058:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8955, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 9028, + "src": "26080:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8954, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26080:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8957, + "mutability": "mutable", + "name": "maxUserEpoch", + "nodeType": "VariableDeclaration", + "scope": 9028, + "src": "26107:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8956, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26107:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26048:85:55" + }, + "returnParameters": { + "id": 8961, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8960, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9028, + "src": "26157:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8959, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26157:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26156:9:55" + }, + "scope": 9062, + "src": "26016:878:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9043, + "nodeType": "Block", + "src": "27098:117:55", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9038, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9036, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9031, + "src": "27178:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "31", + "id": 9037, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27190:7:55", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "27178:19:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9039, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "27177:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "31", + "id": 9040, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27201:7:55", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "27177:31:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9035, + "id": 9042, + "nodeType": "Return", + "src": "27170:38:55" + } + ] + }, + "documentation": { + "id": 9029, + "nodeType": "StructuredDocumentation", + "src": "26900:114:55", + "text": " @dev Rounds the provided timestamp down to the beginning of the previous week (Thurs 00:00 UTC)" + }, + "id": 9044, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_roundDownTimestamp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9032, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9031, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 9044, + "src": "27048:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9030, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27048:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "27047:19:55" + }, + "returnParameters": { + "id": 9035, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9034, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9044, + "src": "27089:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9033, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27089:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "27088:9:55" + }, + "scope": 9062, + "src": "27019:196:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9060, + "nodeType": "Block", + "src": "27411:135:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9055, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9053, + "name": "timestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9047, + "src": "27515:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 9054, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27527:7:55", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "27515:19:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 9056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27537:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "27515:23:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9052, + "name": "_roundDownTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9044, + "src": "27495:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 9058, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27495:44:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9051, + "id": 9059, + "nodeType": "Return", + "src": "27488:51:55" + } + ] + }, + "documentation": { + "id": 9045, + "nodeType": "StructuredDocumentation", + "src": "27221:108:55", + "text": " @dev Rounds the provided timestamp up to the beginning of the next week (Thurs 00:00 UTC)" + }, + "id": 9061, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_roundUpTimestamp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9048, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9047, + "mutability": "mutable", + "name": "timestamp", + "nodeType": "VariableDeclaration", + "scope": 9061, + "src": "27361:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9046, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27361:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "27360:19:55" + }, + "returnParameters": { + "id": 9051, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9050, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9061, + "src": "27402:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9049, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27402:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "27401:9:55" + }, + "scope": 9062, + "src": "27334:212:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 9063, + "src": "1929:25619:55" + } + ], + "src": "688:26861:55" + }, + "id": 55 + }, + "contracts/fee-distribution/FeeDistributorBALClaimer.sol": { + "ast": { + "absolutePath": "contracts/fee-distribution/FeeDistributorBALClaimer.sol", + "exportedSymbols": { + "FeeDistributorBALClaimer": [ + 9223 + ] + }, + "id": 9224, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9064, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:56" + }, + { + "id": 9065, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:56" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "id": 9066, + "nodeType": "ImportDirective", + "scope": 9224, + "sourceUnit": 877, + "src": "747:91:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol", + "id": 9067, + "nodeType": "ImportDirective", + "scope": 9224, + "sourceUnit": 563, + "src": "839:85:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol", + "file": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol", + "id": 9068, + "nodeType": "ImportDirective", + "scope": 9224, + "sourceUnit": 1721, + "src": "925:85:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 9069, + "nodeType": "StructuredDocumentation", + "src": "1012:215:56", + "text": " @title FeeDistributorBALClaimer\n @notice Atomically mints any outstanding BAL from a SingleRecipientGauge and transfers it to the FeeDistributor\n in order for it to be distributed among veBAL holders." + }, + "fullyImplemented": true, + "id": 9223, + "linearizedBaseContracts": [ + 9223 + ], + "name": "FeeDistributorBALClaimer", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 9071, + "mutability": "immutable", + "name": "_balToken", + "nodeType": "VariableDeclaration", + "scope": 9223, + "src": "1268:34:56", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 9070, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1268:6:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9073, + "mutability": "immutable", + "name": "_authorizerAdaptor", + "nodeType": "VariableDeclaration", + "scope": 9223, + "src": "1308:55:56", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 9072, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1308:18:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9075, + "mutability": "immutable", + "name": "_feeDistributor", + "nodeType": "VariableDeclaration", + "scope": 9223, + "src": "1369:49:56", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + }, + "typeName": { + "id": 9074, + "name": "IFeeDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 562, + "src": "1369:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9077, + "mutability": "immutable", + "name": "_gauge", + "nodeType": "VariableDeclaration", + "scope": 9223, + "src": "1424:46:56", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + }, + "typeName": { + "id": 9076, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "1424:21:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9079, + "mutability": "immutable", + "name": "_balTokenHolder", + "nodeType": "VariableDeclaration", + "scope": 9223, + "src": "1476:49:56", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + }, + "typeName": { + "id": 9078, + "name": "IBALTokenHolder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1720, + "src": "1476:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 9118, + "nodeType": "Block", + "src": "1673:299:56", + "statements": [ + { + "assignments": [ + 9089 + ], + "declarations": [ + { + "constant": false, + "id": 9089, + "mutability": "mutable", + "name": "balTokenHolder", + "nodeType": "VariableDeclaration", + "scope": 9118, + "src": "1683:30:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + }, + "typeName": { + "id": 9088, + "name": "IBALTokenHolder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1720, + "src": "1683:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "visibility": "internal" + } + ], + "id": 9095, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9091, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9083, + "src": "1732:5:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 9092, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRecipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 875, + "src": "1732:18:56", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 9093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1732:20:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9090, + "name": "IBALTokenHolder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1720, + "src": "1716:15:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBALTokenHolder_$1720_$", + "typeString": "type(contract IBALTokenHolder)" + } + }, + "id": 9094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1716:37:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1683:70:56" + }, + { + "expression": { + "id": 9100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9096, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9071, + "src": "1764:9:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9097, + "name": "balTokenHolder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9089, + "src": "1776:14:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "id": 9098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getBalancerToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 1698, + "src": "1776:31:56", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IBalancerToken_$252_$", + "typeString": "function () view external returns (contract IBalancerToken)" + } + }, + "id": 9099, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1776:33:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "src": "1764:45:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 9101, + "nodeType": "ExpressionStatement", + "src": "1764:45:56" + }, + { + "expression": { + "id": 9104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9102, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9073, + "src": "1819:18:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9103, + "name": "authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9085, + "src": "1840:17:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "src": "1819:38:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 9105, + "nodeType": "ExpressionStatement", + "src": "1819:38:56" + }, + { + "expression": { + "id": 9108, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9106, + "name": "_feeDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9075, + "src": "1867:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9107, + "name": "feeDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9081, + "src": "1885:14:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "src": "1867:32:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "id": 9109, + "nodeType": "ExpressionStatement", + "src": "1867:32:56" + }, + { + "expression": { + "id": 9112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9110, + "name": "_gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9077, + "src": "1909:6:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9111, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9083, + "src": "1918:5:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "src": "1909:14:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 9113, + "nodeType": "ExpressionStatement", + "src": "1909:14:56" + }, + { + "expression": { + "id": 9116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9114, + "name": "_balTokenHolder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9079, + "src": "1933:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9115, + "name": "balTokenHolder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9089, + "src": "1951:14:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "src": "1933:32:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "id": 9117, + "nodeType": "ExpressionStatement", + "src": "1933:32:56" + } + ] + }, + "id": 9119, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9086, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9081, + "mutability": "mutable", + "name": "feeDistributor", + "nodeType": "VariableDeclaration", + "scope": 9119, + "src": "1553:30:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + }, + "typeName": { + "id": 9080, + "name": "IFeeDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 562, + "src": "1553:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9083, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 9119, + "src": "1593:27:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + }, + "typeName": { + "id": 9082, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "1593:21:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9085, + "mutability": "mutable", + "name": "authorizerAdaptor", + "nodeType": "VariableDeclaration", + "scope": 9119, + "src": "1630:36:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 9084, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1630:18:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "1543:129:56" + }, + "returnParameters": { + "id": 9087, + "nodeType": "ParameterList", + "parameters": [], + "src": "1673:0:56" + }, + "scope": 9223, + "src": "1532:440:56", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 9127, + "nodeType": "Block", + "src": "2120:33:56", + "statements": [ + { + "expression": { + "id": 9125, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9071, + "src": "2137:9:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "functionReturnParameters": 9124, + "id": 9126, + "nodeType": "Return", + "src": "2130:16:56" + } + ] + }, + "documentation": { + "id": 9120, + "nodeType": "StructuredDocumentation", + "src": "1978:78:56", + "text": " @notice Returns the address of the Balancer token contract." + }, + "functionSelector": "c0039699", + "id": 9128, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBalancerToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9121, + "nodeType": "ParameterList", + "parameters": [], + "src": "2086:2:56" + }, + "returnParameters": { + "id": 9124, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9123, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9128, + "src": "2112:6:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 9122, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2112:6:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2111:8:56" + }, + "scope": 9223, + "src": "2061:92:56", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9136, + "nodeType": "Block", + "src": "2320:42:56", + "statements": [ + { + "expression": { + "id": 9134, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9073, + "src": "2337:18:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "functionReturnParameters": 9133, + "id": 9135, + "nodeType": "Return", + "src": "2330:25:56" + } + ] + }, + "documentation": { + "id": 9129, + "nodeType": "StructuredDocumentation", + "src": "2159:81:56", + "text": " @notice Returns the address of the AuthorizerAdaptor contract." + }, + "functionSelector": "e758d36b", + "id": 9137, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuthorizerAdaptor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9130, + "nodeType": "ParameterList", + "parameters": [], + "src": "2274:2:56" + }, + "returnParameters": { + "id": 9133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9132, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9137, + "src": "2300:18:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 9131, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "2300:18:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "2299:20:56" + }, + "scope": 9223, + "src": "2245:117:56", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9145, + "nodeType": "Block", + "src": "2520:39:56", + "statements": [ + { + "expression": { + "id": 9143, + "name": "_feeDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9075, + "src": "2537:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "functionReturnParameters": 9142, + "id": 9144, + "nodeType": "Return", + "src": "2530:22:56" + } + ] + }, + "documentation": { + "id": 9138, + "nodeType": "StructuredDocumentation", + "src": "2368:78:56", + "text": " @notice Returns the address of the FeeDistributor contract." + }, + "functionSelector": "c8913173", + "id": 9146, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getFeeDistributor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9139, + "nodeType": "ParameterList", + "parameters": [], + "src": "2477:2:56" + }, + "returnParameters": { + "id": 9142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9141, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9146, + "src": "2503:15:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + }, + "typeName": { + "id": 9140, + "name": "IFeeDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 562, + "src": "2503:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "visibility": "internal" + } + ], + "src": "2502:17:56" + }, + "scope": 9223, + "src": "2451:108:56", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9154, + "nodeType": "Block", + "src": "2731:30:56", + "statements": [ + { + "expression": { + "id": 9152, + "name": "_gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9077, + "src": "2748:6:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "functionReturnParameters": 9151, + "id": 9153, + "nodeType": "Return", + "src": "2741:13:56" + } + ] + }, + "documentation": { + "id": 9147, + "nodeType": "StructuredDocumentation", + "src": "2565:95:56", + "text": " @notice Returns the address of the associated SingleRecipientGauge contract." + }, + "functionSelector": "f2803f03", + "id": 9155, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9148, + "nodeType": "ParameterList", + "parameters": [], + "src": "2682:2:56" + }, + "returnParameters": { + "id": 9151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9150, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9155, + "src": "2708:21:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + }, + "typeName": { + "id": 9149, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "2708:21:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "visibility": "internal" + } + ], + "src": "2707:23:56" + }, + "scope": 9223, + "src": "2665:96:56", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9163, + "nodeType": "Block", + "src": "2930:39:56", + "statements": [ + { + "expression": { + "id": 9161, + "name": "_balTokenHolder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9079, + "src": "2947:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "functionReturnParameters": 9160, + "id": 9162, + "nodeType": "Return", + "src": "2940:22:56" + } + ] + }, + "documentation": { + "id": 9156, + "nodeType": "StructuredDocumentation", + "src": "2767:89:56", + "text": " @notice Returns the address of the associated BALTokenHolder contract." + }, + "functionSelector": "0a08832d", + "id": 9164, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBALTokenHolder", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9157, + "nodeType": "ParameterList", + "parameters": [], + "src": "2887:2:56" + }, + "returnParameters": { + "id": 9160, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9159, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9164, + "src": "2913:15:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + }, + "typeName": { + "id": 9158, + "name": "IBALTokenHolder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1720, + "src": "2913:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "visibility": "internal" + } + ], + "src": "2912:17:56" + }, + "scope": 9223, + "src": "2861:108:56", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9200, + "nodeType": "Block", + "src": "3339:374:56", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9169, + "name": "_gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9077, + "src": "3366:6:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + ], + "id": 9168, + "name": "_checkpointGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9222, + "src": "3349:16:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IStakelessGauge_$920_$returns$__$", + "typeString": "function (contract IStakelessGauge)" + } + }, + "id": 9170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3349:24:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9171, + "nodeType": "ExpressionStatement", + "src": "3349:24:56" + }, + { + "expression": { + "arguments": [ + { + "id": 9175, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9071, + "src": "3532:9:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "expression": { + "id": 9172, + "name": "_feeDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9075, + "src": "3500:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "id": 9174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "checkpointToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 532, + "src": "3500:31:56", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$1650_$returns$__$", + "typeString": "function (contract IERC20) external" + } + }, + "id": 9176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3500:42:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9177, + "nodeType": "ExpressionStatement", + "src": "3500:42:56" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9183, + "name": "_feeDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9075, + "src": "3590:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + ], + "id": 9182, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3582:7:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9181, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3582:7:56", + "typeDescriptions": {} + } + }, + "id": 9184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3582:24:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 9189, + "name": "_balTokenHolder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9079, + "src": "3636:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + ], + "id": 9188, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3628:7:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9187, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3628:7:56", + "typeDescriptions": {} + } + }, + "id": 9190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3628:24:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9185, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9071, + "src": "3608:9:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 9186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 1589, + "src": "3608:19:56", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 9191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3608:45:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9178, + "name": "_balTokenHolder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9079, + "src": "3552:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBALTokenHolder_$1720", + "typeString": "contract IBALTokenHolder" + } + }, + "id": 9180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "withdrawFunds", + "nodeType": "MemberAccess", + "referencedDeclaration": 1710, + "src": "3552:29:56", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256) external" + } + }, + "id": 9192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3552:102:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9193, + "nodeType": "ExpressionStatement", + "src": "3552:102:56" + }, + { + "expression": { + "arguments": [ + { + "id": 9197, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9071, + "src": "3696:9:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "expression": { + "id": 9194, + "name": "_feeDistributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9075, + "src": "3664:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFeeDistributor_$562", + "typeString": "contract IFeeDistributor" + } + }, + "id": 9196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "checkpointToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 532, + "src": "3664:31:56", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$1650_$returns$__$", + "typeString": "function (contract IERC20) external" + } + }, + "id": 9198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3664:42:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9199, + "nodeType": "ExpressionStatement", + "src": "3664:42:56" + } + ] + }, + "documentation": { + "id": 9165, + "nodeType": "StructuredDocumentation", + "src": "2975:325:56", + "text": " @notice Mint any outstanding BAL emissions and send them to the FeeDistributor\n @dev In order to call this function the `FeeDistributorBALClaimer` must be authorized to:\n - Withdraw BAL from the linked BALTokenHolder\n - Checkpoint the associated SingleRecipientGauge in order to mint BAL." + }, + "functionSelector": "eeed85fa", + "id": 9201, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "distributeBAL", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9166, + "nodeType": "ParameterList", + "parameters": [], + "src": "3327:2:56" + }, + "returnParameters": { + "id": 9167, + "nodeType": "ParameterList", + "parameters": [], + "src": "3339:0:56" + }, + "scope": 9223, + "src": "3305:408:56", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9221, + "nodeType": "Block", + "src": "3776:126:56", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9211, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9203, + "src": "3827:5:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakelessGauge_$920", + "typeString": "contract IStakelessGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IStakelessGauge_$920", + "typeString": "contract IStakelessGauge" + } + ], + "id": 9210, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3819:7:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9209, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3819:7:56", + "typeDescriptions": {} + } + }, + "id": 9212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3819:14:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "expression": { + "id": 9215, + "name": "IStakelessGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "3858:15:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IStakelessGauge_$920_$", + "typeString": "type(contract IStakelessGauge)" + } + }, + "id": 9216, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "checkpoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 919, + "src": "3858:26:56", + "typeDescriptions": { + "typeIdentifier": "t_function_declaration_payable$__$returns$_t_bool_$", + "typeString": "function IStakelessGauge.checkpoint() payable returns (bool)" + } + }, + "id": 9217, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "3858:35:56", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "expression": { + "id": 9213, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3835:3:56", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9214, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "src": "3835:22:56", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 9218, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3835:59:56", + "tryCall": false, + "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": 9206, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9073, + "src": "3786:18:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 9208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "performAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 27, + "src": "3786:32:56", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (address,bytes memory) payable external returns (bytes memory)" + } + }, + "id": 9219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3786:109:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 9220, + "nodeType": "ExpressionStatement", + "src": "3786:109:56" + } + ] + }, + "id": 9222, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkpointGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9203, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 9222, + "src": "3745:21:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakelessGauge_$920", + "typeString": "contract IStakelessGauge" + }, + "typeName": { + "id": 9202, + "name": "IStakelessGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 920, + "src": "3745:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakelessGauge_$920", + "typeString": "contract IStakelessGauge" + } + }, + "visibility": "internal" + } + ], + "src": "3744:23:56" + }, + "returnParameters": { + "id": 9205, + "nodeType": "ParameterList", + "parameters": [], + "src": "3776:0:56" + }, + "scope": 9223, + "src": "3719:183:56", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 9224, + "src": "1228:2676:56" + } + ], + "src": "688:3217:56" + }, + "id": 56 + }, + "contracts/gauges/ChildChainLiquidityGaugeFactory.sol": { + "ast": { + "absolutePath": "contracts/gauges/ChildChainLiquidityGaugeFactory.sol", + "exportedSymbols": { + "ChildChainLiquidityGaugeFactory": [ + 9476 + ] + }, + "id": 9477, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9225, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:57" + }, + { + "id": 9226, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:57" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol", + "id": 9227, + "nodeType": "ImportDirective", + "scope": 9477, + "sourceUnit": 376, + "src": "747:102:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol", + "id": 9228, + "nodeType": "ImportDirective", + "scope": 9477, + "sourceUnit": 749, + "src": "850:85:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 9229, + "nodeType": "ImportDirective", + "scope": 9477, + "sourceUnit": 2289, + "src": "936:65:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "id": 9230, + "nodeType": "ImportDirective", + "scope": 9477, + "sourceUnit": 3132, + "src": "1003:76:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 9231, + "name": "IChildChainLiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 375, + "src": "1125:32:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainLiquidityGaugeFactory_$375", + "typeString": "contract IChildChainLiquidityGaugeFactory" + } + }, + "id": 9232, + "nodeType": "InheritanceSpecifier", + "src": "1125:32:57" + } + ], + "contractDependencies": [ + 375, + 768 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 9476, + "linearizedBaseContracts": [ + 9476, + 375, + 768 + ], + "name": "ChildChainLiquidityGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 9242, + "mutability": "constant", + "name": "_CLAIM_SIG", + "nodeType": "VariableDeclaration", + "scope": 9476, + "src": "1362:75:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9233, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1362:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 9241, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "hexValue": "6765745f7265776172642829", + "id": 9235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1410:14:57", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1afe22a60e4e4b5fa7561dbfb52f5a766eba86c52b84c4946364e82fa9056a57", + "typeString": "literal_string \"get_reward()\"" + }, + "value": "get_reward()" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_1afe22a60e4e4b5fa7561dbfb52f5a766eba86c52b84c4946364e82fa9056a57", + "typeString": "literal_string \"get_reward()\"" + } + ], + "id": 9234, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1400:9:57", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 9236, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1400:25:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_rational_224_by_1", + "typeString": "int_const 224" + }, + "id": 9239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3238", + "id": 9237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1430:2:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_28_by_1", + "typeString": "int_const 28" + }, + "value": "28" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "38", + "id": 9238, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1435:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "1430:6:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_224_by_1", + "typeString": "int_const 224" + } + } + ], + "id": 9240, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1429:8:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_224_by_1", + "typeString": "int_const 224" + } + }, + "src": "1400:37:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9244, + "mutability": "immutable", + "name": "_gaugeImplementation", + "nodeType": "VariableDeclaration", + "scope": 9476, + "src": "1444:54:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 9243, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1444:15:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9246, + "mutability": "immutable", + "name": "_childChainStreamerImplementation", + "nodeType": "VariableDeclaration", + "scope": 9476, + "src": "1504:71:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 9245, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "1504:19:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9250, + "mutability": "mutable", + "name": "_isGaugeFromFactory", + "nodeType": "VariableDeclaration", + "scope": 9476, + "src": "1582:52:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 9249, + "keyType": { + "id": 9247, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1590:7:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1582:24:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 9248, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1601:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9254, + "mutability": "mutable", + "name": "_isStreamerFromFactory", + "nodeType": "VariableDeclaration", + "scope": 9476, + "src": "1640:55:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 9253, + "keyType": { + "id": 9251, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1648:7:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1640:24:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 9252, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1659:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9258, + "mutability": "mutable", + "name": "_poolGauge", + "nodeType": "VariableDeclaration", + "scope": 9476, + "src": "1701:46:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 9257, + "keyType": { + "id": 9255, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1709:7:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1701:27:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueType": { + "id": 9256, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1720:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9262, + "mutability": "mutable", + "name": "_gaugeStreamer", + "nodeType": "VariableDeclaration", + "scope": 9476, + "src": "1753:50:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 9261, + "keyType": { + "id": 9259, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1761:7:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1753:27:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueType": { + "id": 9260, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1772:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "private" + }, + { + "body": { + "id": 9277, + "nodeType": "Block", + "src": "1885:109:57", + "statements": [ + { + "expression": { + "id": 9271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9269, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9244, + "src": "1895:20:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9270, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9264, + "src": "1918:5:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "src": "1895:28:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "id": 9272, + "nodeType": "ExpressionStatement", + "src": "1895:28:57" + }, + { + "expression": { + "id": 9275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9273, + "name": "_childChainStreamerImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9246, + "src": "1933:33:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9274, + "name": "childChainStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9266, + "src": "1969:18:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "src": "1933:54:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "id": 9276, + "nodeType": "ExpressionStatement", + "src": "1933:54:57" + } + ] + }, + "id": 9278, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9264, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 9278, + "src": "1822:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 9263, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1822:15:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9266, + "mutability": "mutable", + "name": "childChainStreamer", + "nodeType": "VariableDeclaration", + "scope": 9278, + "src": "1845:38:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 9265, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "1845:19:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "internal" + } + ], + "src": "1821:63:57" + }, + "returnParameters": { + "id": 9268, + "nodeType": "ParameterList", + "parameters": [], + "src": "1885:0:57" + }, + "scope": 9476, + "src": "1810:184:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 328 + ], + "body": { + "id": 9287, + "nodeType": "Block", + "src": "2184:44:57", + "statements": [ + { + "expression": { + "id": 9285, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9244, + "src": "2201:20:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 9284, + "id": 9286, + "nodeType": "Return", + "src": "2194:27:57" + } + ] + }, + "documentation": { + "id": 9279, + "nodeType": "StructuredDocumentation", + "src": "2000:96:57", + "text": " @notice Returns the address of the implementation used for gauge deployments." + }, + "functionSelector": "39312dee", + "id": 9288, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeImplementation", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9281, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2149:8:57" + }, + "parameters": { + "id": 9280, + "nodeType": "ParameterList", + "parameters": [], + "src": "2132:2:57" + }, + "returnParameters": { + "id": 9284, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9283, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9288, + "src": "2167:15:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 9282, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "2167:15:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "2166:17:57" + }, + "scope": 9476, + "src": "2101:127:57", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 334 + ], + "body": { + "id": 9297, + "nodeType": "Block", + "src": "2438:57:57", + "statements": [ + { + "expression": { + "id": 9295, + "name": "_childChainStreamerImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9246, + "src": "2455:33:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "functionReturnParameters": 9294, + "id": 9296, + "nodeType": "Return", + "src": "2448:40:57" + } + ] + }, + "documentation": { + "id": 9289, + "nodeType": "StructuredDocumentation", + "src": "2234:99:57", + "text": " @notice Returns the address of the implementation used for streamer deployments." + }, + "functionSelector": "f9e0a13e", + "id": 9298, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getChildChainStreamerImplementation", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9291, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2399:8:57" + }, + "parameters": { + "id": 9290, + "nodeType": "ParameterList", + "parameters": [], + "src": "2382:2:57" + }, + "returnParameters": { + "id": 9294, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9293, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9298, + "src": "2417:19:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + }, + "typeName": { + "id": 9292, + "name": "IChildChainStreamer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 400, + "src": "2417:19:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "visibility": "internal" + } + ], + "src": "2416:21:57" + }, + "scope": 9476, + "src": "2338:157:57", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 342 + ], + "body": { + "id": 9313, + "nodeType": "Block", + "src": "2669:57:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 9308, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9258, + "src": "2702:10:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 9310, + "indexExpression": { + "id": 9309, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9301, + "src": "2713:4:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2702:16:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9307, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "2686:15:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 9311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2686:33:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 9306, + "id": 9312, + "nodeType": "Return", + "src": "2679:40:57" + } + ] + }, + "documentation": { + "id": 9299, + "nodeType": "StructuredDocumentation", + "src": "2501:80:57", + "text": " @notice Returns the address of the gauge belonging to `pool`." + }, + "functionSelector": "a8ea6875", + "id": 9314, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPoolGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9303, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2634:8:57" + }, + "parameters": { + "id": 9302, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9301, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 9314, + "src": "2608:12:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9300, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2608:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2607:14:57" + }, + "returnParameters": { + "id": 9306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9305, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9314, + "src": "2652:15:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 9304, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "2652:15:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "2651:17:57" + }, + "scope": 9476, + "src": "2586:140:57", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 760 + ], + "body": { + "id": 9327, + "nodeType": "Block", + "src": "2897:50:57", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 9323, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9250, + "src": "2914:19:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 9325, + "indexExpression": { + "id": 9324, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9317, + "src": "2934:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2914:26:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 9322, + "id": 9326, + "nodeType": "Return", + "src": "2907:33:57" + } + ] + }, + "documentation": { + "id": 9315, + "nodeType": "StructuredDocumentation", + "src": "2732:79:57", + "text": " @notice Returns true if `gauge` was created by this factory." + }, + "functionSelector": "ce3cc8bd", + "id": 9328, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9319, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2873:8:57" + }, + "parameters": { + "id": 9318, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9317, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 9328, + "src": "2844:13:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9316, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2844:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2843:15:57" + }, + "returnParameters": { + "id": 9322, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9321, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9328, + "src": "2891:4:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9320, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2891:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2890:6:57" + }, + "scope": 9476, + "src": "2816:131:57", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 350 + ], + "body": { + "id": 9341, + "nodeType": "Block", + "src": "3122:45:57", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 9337, + "name": "_gaugeStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9262, + "src": "3139:14:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 9339, + "indexExpression": { + "id": 9338, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9331, + "src": "3154:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3139:21:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 9336, + "id": 9340, + "nodeType": "Return", + "src": "3132:28:57" + } + ] + }, + "documentation": { + "id": 9329, + "nodeType": "StructuredDocumentation", + "src": "2953:84:57", + "text": " @notice Returns the address of the streamer belonging to `gauge`." + }, + "functionSelector": "90b20087", + "id": 9342, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeStreamer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9333, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3095:8:57" + }, + "parameters": { + "id": 9332, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9331, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 9342, + "src": "3068:13:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9330, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3068:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3067:15:57" + }, + "returnParameters": { + "id": 9336, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9335, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9342, + "src": "3113:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9334, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3113:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3112:9:57" + }, + "scope": 9476, + "src": "3042:125:57", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 358 + ], + "body": { + "id": 9355, + "nodeType": "Block", + "src": "3347:56:57", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 9351, + "name": "_isStreamerFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9254, + "src": "3364:22:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 9353, + "indexExpression": { + "id": 9352, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9345, + "src": "3387:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3364:32:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 9350, + "id": 9354, + "nodeType": "Return", + "src": "3357:39:57" + } + ] + }, + "documentation": { + "id": 9343, + "nodeType": "StructuredDocumentation", + "src": "3173:82:57", + "text": " @notice Returns true if `streamer` was created by this factory." + }, + "functionSelector": "cbda9327", + "id": 9356, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isStreamerFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9347, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3323:8:57" + }, + "parameters": { + "id": 9346, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9345, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 9356, + "src": "3291:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9344, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3291:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3290:18:57" + }, + "returnParameters": { + "id": 9350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9349, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9356, + "src": "3341:4:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9348, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3341:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3340:6:57" + }, + "scope": 9476, + "src": "3260:143:57", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 366 + ], + "body": { + "id": 9371, + "nodeType": "Block", + "src": "3572:59:57", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 9366, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9359, + "src": "3607:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9365, + "name": "IRewardsOnlyGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 860, + "src": "3589:17:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRewardsOnlyGauge_$860_$", + "typeString": "type(contract IRewardsOnlyGauge)" + } + }, + "id": 9367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3589:24:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + }, + "id": 9368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "lp_token", + "nodeType": "MemberAccess", + "referencedDeclaration": 843, + "src": "3589:33:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IERC20_$1650_$", + "typeString": "function () view external returns (contract IERC20)" + } + }, + "id": 9369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3589:35:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "functionReturnParameters": 9364, + "id": 9370, + "nodeType": "Return", + "src": "3582:42:57" + } + ] + }, + "documentation": { + "id": 9357, + "nodeType": "StructuredDocumentation", + "src": "3409:81:57", + "text": " @notice Returns the address of the pool which `gauge` belongs." + }, + "functionSelector": "744a65dd", + "id": 9372, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugePool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9361, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3546:8:57" + }, + "parameters": { + "id": 9360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9359, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 9372, + "src": "3517:13:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9358, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3517:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3516:15:57" + }, + "returnParameters": { + "id": 9364, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9363, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9372, + "src": "3564:6:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 9362, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "3564:6:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "3563:8:57" + }, + "scope": 9476, + "src": "3495:136:57", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 374 + ], + "body": { + "id": 9390, + "nodeType": "Block", + "src": "3813:69:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 9385, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9375, + "src": "3868:4:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9384, + "name": "getPoolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9314, + "src": "3855:12:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "function (address) view returns (contract ILiquidityGauge)" + } + }, + "id": 9386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3855:18:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + ], + "id": 9383, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3847:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9382, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3847:7:57", + "typeDescriptions": {} + } + }, + "id": 9387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3847:27:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9381, + "name": "getGaugeStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9342, + "src": "3830:16:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", + "typeString": "function (address) view returns (address)" + } + }, + "id": 9388, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3830:45:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 9380, + "id": 9389, + "nodeType": "Return", + "src": "3823:52:57" + } + ] + }, + "documentation": { + "id": 9373, + "nodeType": "StructuredDocumentation", + "src": "3637:91:57", + "text": " @notice Returns the address of the streamer belonging to `pool`'s gauge." + }, + "functionSelector": "8a4ffeb0", + "id": 9391, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPoolStreamer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9377, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3786:8:57" + }, + "parameters": { + "id": 9376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9375, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 9391, + "src": "3758:12:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9374, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3758:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3757:14:57" + }, + "returnParameters": { + "id": 9380, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9379, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9391, + "src": "3804:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9378, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3804:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3803:9:57" + }, + "scope": 9476, + "src": "3733:149:57", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 767 + ], + "body": { + "id": 9474, + "nodeType": "Block", + "src": "4529:570:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 9401, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9258, + "src": "4547:10:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 9403, + "indexExpression": { + "id": 9402, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9394, + "src": "4558:4:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4547:16:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9406, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4575:1:57", + "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": 9405, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4567:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9404, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4567:7:57", + "typeDescriptions": {} + } + }, + "id": 9407, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4567:10:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "4547:30:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520616c726561647920657869737473", + "id": 9409, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4579:22:57", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + }, + "value": "Gauge already exists" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + } + ], + "id": 9400, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4539:7:57", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4539:63:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9411, + "nodeType": "ExpressionStatement", + "src": "4539:63:57" + }, + { + "assignments": [ + 9413 + ], + "declarations": [ + { + "constant": false, + "id": 9413, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 9474, + "src": "4613:13:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9412, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4613:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 9421, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 9418, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9244, + "src": "4650:20:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + ], + "id": 9417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4642:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9416, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4642:7:57", + "typeDescriptions": {} + } + }, + "id": 9419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4642:29:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9414, + "name": "Clones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3131, + "src": "4629:6:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Clones_$3131_$", + "typeString": "type(library Clones)" + } + }, + "id": 9415, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "clone", + "nodeType": "MemberAccess", + "referencedDeclaration": 3074, + "src": "4629:12:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", + "typeString": "function (address) returns (address)" + } + }, + "id": 9420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4629:43:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4613:59:57" + }, + { + "assignments": [ + 9423 + ], + "declarations": [ + { + "constant": false, + "id": 9423, + "mutability": "mutable", + "name": "streamer", + "nodeType": "VariableDeclaration", + "scope": 9474, + "src": "4682:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9422, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4682:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 9431, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 9428, + "name": "_childChainStreamerImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9246, + "src": "4722:33:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + ], + "id": 9427, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4714:7:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9426, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4714:7:57", + "typeDescriptions": {} + } + }, + "id": 9429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4714:42:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9424, + "name": "Clones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3131, + "src": "4701:6:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Clones_$3131_$", + "typeString": "type(library Clones)" + } + }, + "id": 9425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "clone", + "nodeType": "MemberAccess", + "referencedDeclaration": 3074, + "src": "4701:12:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", + "typeString": "function (address) returns (address)" + } + }, + "id": 9430, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4701:56:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4682:75:57" + }, + { + "expression": { + "arguments": [ + { + "id": 9436, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9413, + "src": "4809:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 9433, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9423, + "src": "4788:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9432, + "name": "IChildChainStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 400, + "src": "4768:19:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IChildChainStreamer_$400_$", + "typeString": "type(contract IChildChainStreamer)" + } + }, + "id": 9434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4768:29:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IChildChainStreamer_$400", + "typeString": "contract IChildChainStreamer" + } + }, + "id": 9435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "initialize", + "nodeType": "MemberAccess", + "referencedDeclaration": 383, + "src": "4768:40:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", + "typeString": "function (address) external" + } + }, + "id": 9437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4768:47:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9438, + "nodeType": "ExpressionStatement", + "src": "4768:47:57" + }, + { + "expression": { + "arguments": [ + { + "id": 9443, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9394, + "src": "4861:4:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9444, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9423, + "src": "4867:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9445, + "name": "_CLAIM_SIG", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9242, + "src": "4877:10:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [ + { + "id": 9440, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9413, + "src": "4843:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9439, + "name": "IRewardsOnlyGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 860, + "src": "4825:17:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRewardsOnlyGauge_$860_$", + "typeString": "type(contract IRewardsOnlyGauge)" + } + }, + "id": 9441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4825:24:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardsOnlyGauge_$860", + "typeString": "contract IRewardsOnlyGauge" + } + }, + "id": 9442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "initialize", + "nodeType": "MemberAccess", + "referencedDeclaration": 838, + "src": "4825:35:57", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$", + "typeString": "function (address,address,bytes32) external" + } + }, + "id": 9446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4825:63:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9447, + "nodeType": "ExpressionStatement", + "src": "4825:63:57" + }, + { + "expression": { + "id": 9452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9448, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9250, + "src": "4899:19:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 9450, + "indexExpression": { + "id": 9449, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9413, + "src": "4919:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4899:26:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 9451, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4928:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "4899:33:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9453, + "nodeType": "ExpressionStatement", + "src": "4899:33:57" + }, + { + "expression": { + "id": 9458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9454, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9258, + "src": "4942:10:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 9456, + "indexExpression": { + "id": 9455, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9394, + "src": "4953:4:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4942:16:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9457, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9413, + "src": "4961:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4942:24:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9459, + "nodeType": "ExpressionStatement", + "src": "4942:24:57" + }, + { + "expression": { + "id": 9464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9460, + "name": "_gaugeStreamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9262, + "src": "4976:14:57", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 9462, + "indexExpression": { + "id": 9461, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9413, + "src": "4991:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4976:21:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9463, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9423, + "src": "5000:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4976:32:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9465, + "nodeType": "ExpressionStatement", + "src": "4976:32:57" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9467, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9413, + "src": "5047:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9468, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9394, + "src": "5054:4:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9469, + "name": "streamer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9423, + "src": "5060:8:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9466, + "name": "RewardsOnlyGaugeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "5023:23:57", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address,address)" + } + }, + "id": 9470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5023:46:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9471, + "nodeType": "EmitStatement", + "src": "5018:51:57" + }, + { + "expression": { + "id": 9472, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9413, + "src": "5087:5:57", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 9399, + "id": 9473, + "nodeType": "Return", + "src": "5080:12:57" + } + ] + }, + "documentation": { + "id": 9392, + "nodeType": "StructuredDocumentation", + "src": "3888:570:57", + "text": " @notice Deploys a new gauge for a Balancer pool.\n @dev As anyone can register arbitrary Balancer pools with the Vault,\n it's impossible to prove onchain that `pool` is a \"valid\" deployment.\n Care must be taken to ensure that gauges deployed from this factory are\n suitable before they are added to the GaugeController.\n This factory disallows deploying multiple gauges for a single pool.\n @param pool The address of the pool for which to deploy a gauge\n @return The address of the deployed gauge" + }, + "functionSelector": "9ed93318", + "id": 9475, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9396, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4502:8:57" + }, + "parameters": { + "id": 9395, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9394, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 9475, + "src": "4479:12:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9393, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4479:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4478:14:57" + }, + "returnParameters": { + "id": 9399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9398, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9475, + "src": "4520:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9397, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4520:7:57", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4519:9:57" + }, + "scope": 9476, + "src": "4463:636:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 9477, + "src": "1081:4020:57" + } + ], + "src": "688:4414:57" + }, + "id": 57 + }, + "contracts/gauges/StakelessGauge.sol": { + "ast": { + "absolutePath": "contracts/gauges/StakelessGauge.sol", + "exportedSymbols": { + "StakelessGauge": [ + 9961 + ] + }, + "id": 9962, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9478, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:58" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 9479, + "nodeType": "ImportDirective", + "scope": 9962, + "sourceUnit": 1651, + "src": "713:87:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol", + "id": 9480, + "nodeType": "ImportDirective", + "scope": 9962, + "sourceUnit": 176, + "src": "801:85:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol", + "id": 9481, + "nodeType": "ImportDirective", + "scope": 9962, + "sourceUnit": 306, + "src": "887:89:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "id": 9482, + "nodeType": "ImportDirective", + "scope": 9962, + "sourceUnit": 721, + "src": "977:86:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol", + "id": 9483, + "nodeType": "ImportDirective", + "scope": 9962, + "sourceUnit": 921, + "src": "1064:85:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ReentrancyGuard.sol", + "id": 9484, + "nodeType": "ImportDirective", + "scope": 9962, + "sourceUnit": 4422, + "src": "1151:85:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 9485, + "name": "IStakelessGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 920, + "src": "1274:15:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakelessGauge_$920", + "typeString": "contract IStakelessGauge" + } + }, + "id": 9486, + "nodeType": "InheritanceSpecifier", + "src": "1274:15:58" + }, + { + "baseName": { + "id": 9487, + "name": "ReentrancyGuard", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4421, + "src": "1291:15:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ReentrancyGuard_$4421", + "typeString": "contract ReentrancyGuard" + } + }, + "id": 9488, + "nodeType": "InheritanceSpecifier", + "src": "1291:15:58" + } + ], + "contractDependencies": [ + 748, + 920, + 4421 + ], + "contractKind": "contract", + "fullyImplemented": false, + "id": 9961, + "linearizedBaseContracts": [ + 9961, + 4421, + 920, + 748 + ], + "name": "StakelessGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 9490, + "mutability": "immutable", + "name": "_balToken", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1313:35:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 9489, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1313:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9492, + "mutability": "immutable", + "name": "_tokenAdmin", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1354:49:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + }, + "typeName": { + "id": 9491, + "name": "IBalancerTokenAdmin", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 305, + "src": "1354:19:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9494, + "mutability": "immutable", + "name": "_minter", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1409:41:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 9493, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1409:15:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9496, + "mutability": "immutable", + "name": "_gaugeController", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1456:51:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 9495, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "1456:16:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9498, + "mutability": "immutable", + "name": "_authorizerAdaptor", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1513:55:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 9497, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1513:18:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 9504, + "name": "Checkpoint", + "nodeType": "EventDefinition", + "parameters": { + "id": 9503, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9500, + "indexed": true, + "mutability": "mutable", + "name": "periodTime", + "nodeType": "VariableDeclaration", + "scope": 9504, + "src": "1592:26:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9499, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1592:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9502, + "indexed": false, + "mutability": "mutable", + "name": "periodEmissions", + "nodeType": "VariableDeclaration", + "scope": 9504, + "src": "1620:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9501, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1620:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1591:53:58" + }, + "src": "1575:70:58" + }, + { + "constant": false, + "id": 9506, + "mutability": "immutable", + "name": "_RATE_REDUCTION_TIME", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1693:46:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9505, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1693:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9508, + "mutability": "immutable", + "name": "_RATE_REDUCTION_COEFFICIENT", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1745:53:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9507, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1745:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9510, + "mutability": "immutable", + "name": "_RATE_DENOMINATOR", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1804:43:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9509, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1804:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9512, + "mutability": "mutable", + "name": "_rate", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1895:21:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9511, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1895:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9514, + "mutability": "mutable", + "name": "_period", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1922:23:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9513, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1922:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9516, + "mutability": "mutable", + "name": "_startEpochTime", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1951:31:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9515, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1951:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9518, + "mutability": "mutable", + "name": "_emissions", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "1989:26:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9517, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1989:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9520, + "mutability": "mutable", + "name": "_isKilled", + "nodeType": "VariableDeclaration", + "scope": 9961, + "src": "2021:22:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9519, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2021:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 9593, + "nodeType": "Block", + "src": "2086:811:58", + "statements": [ + { + "assignments": [ + 9526 + ], + "declarations": [ + { + "constant": false, + "id": 9526, + "mutability": "mutable", + "name": "tokenAdmin", + "nodeType": "VariableDeclaration", + "scope": 9593, + "src": "2096:30:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + }, + "typeName": { + "id": 9525, + "name": "IBalancerTokenAdmin", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 305, + "src": "2096:19:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "visibility": "internal" + } + ], + "id": 9532, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9528, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9522, + "src": "2149:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "id": 9529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getBalancerTokenAdmin", + "nodeType": "MemberAccess", + "referencedDeclaration": 52, + "src": "2149:28:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IBalancerTokenAdmin_$305_$", + "typeString": "function () view external returns (contract IBalancerTokenAdmin)" + } + }, + "id": 9530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2149:30:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + ], + "id": 9527, + "name": "IBalancerTokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 305, + "src": "2129:19:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBalancerTokenAdmin_$305_$", + "typeString": "type(contract IBalancerTokenAdmin)" + } + }, + "id": 9531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2129:51:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2096:84:58" + }, + { + "assignments": [ + 9534 + ], + "declarations": [ + { + "constant": false, + "id": 9534, + "mutability": "mutable", + "name": "balToken", + "nodeType": "VariableDeclaration", + "scope": 9593, + "src": "2190:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 9533, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2190:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "id": 9538, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9535, + "name": "tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9526, + "src": "2208:10:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 9536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getBalancerToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 284, + "src": "2208:27:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IBalancerToken_$252_$", + "typeString": "function () view external returns (contract IBalancerToken)" + } + }, + "id": 9537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2208:29:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerToken_$252", + "typeString": "contract IBalancerToken" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2190:47:58" + }, + { + "assignments": [ + 9540 + ], + "declarations": [ + { + "constant": false, + "id": 9540, + "mutability": "mutable", + "name": "gaugeController", + "nodeType": "VariableDeclaration", + "scope": 9593, + "src": "2247:32:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + }, + "typeName": { + "id": 9539, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "2247:16:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "visibility": "internal" + } + ], + "id": 9544, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9541, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9522, + "src": "2282:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "id": 9542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getGaugeController", + "nodeType": "MemberAccess", + "referencedDeclaration": 58, + "src": "2282:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IGaugeController_$720_$", + "typeString": "function () view external returns (contract IGaugeController)" + } + }, + "id": 9543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2282:27:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2247:62:58" + }, + { + "expression": { + "id": 9547, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9545, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9490, + "src": "2320:9:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9546, + "name": "balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9534, + "src": "2332:8:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "src": "2320:20:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 9548, + "nodeType": "ExpressionStatement", + "src": "2320:20:58" + }, + { + "expression": { + "id": 9551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9549, + "name": "_tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9492, + "src": "2350:11:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9550, + "name": "tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9526, + "src": "2364:10:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "src": "2350:24:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 9552, + "nodeType": "ExpressionStatement", + "src": "2350:24:58" + }, + { + "expression": { + "id": 9555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9553, + "name": "_minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9494, + "src": "2384:7:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9554, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9522, + "src": "2394:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "src": "2384:16:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "id": 9556, + "nodeType": "ExpressionStatement", + "src": "2384:16:58" + }, + { + "expression": { + "id": 9559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9557, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9496, + "src": "2410:16:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9558, + "name": "gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9540, + "src": "2429:15:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "src": "2410:34:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 9560, + "nodeType": "ExpressionStatement", + "src": "2410:34:58" + }, + { + "expression": { + "id": 9565, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9561, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9498, + "src": "2454:18:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9562, + "name": "gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9540, + "src": "2475:15:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 9563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "admin", + "nodeType": "MemberAccess", + "referencedDeclaration": 719, + "src": "2475:21:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizerAdaptor_$28_$", + "typeString": "function () view external returns (contract IAuthorizerAdaptor)" + } + }, + "id": 9564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2475:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "src": "2454:44:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 9566, + "nodeType": "ExpressionStatement", + "src": "2454:44:58" + }, + { + "expression": { + "id": 9571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9567, + "name": "_RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9506, + "src": "2509:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9568, + "name": "tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9526, + "src": "2532:10:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 9569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "RATE_REDUCTION_TIME", + "nodeType": "MemberAccess", + "referencedDeclaration": 268, + "src": "2532:30:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 9570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2532:32:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2509:55:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9572, + "nodeType": "ExpressionStatement", + "src": "2509:55:58" + }, + { + "expression": { + "id": 9577, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9573, + "name": "_RATE_REDUCTION_COEFFICIENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9508, + "src": "2574:27:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9574, + "name": "tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9526, + "src": "2604:10:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 9575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "RATE_REDUCTION_COEFFICIENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 273, + "src": "2604:37:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 9576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2604:39:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2574:69:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9578, + "nodeType": "ExpressionStatement", + "src": "2574:69:58" + }, + { + "expression": { + "id": 9583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9579, + "name": "_RATE_DENOMINATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9510, + "src": "2653:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9580, + "name": "tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9526, + "src": "2673:10:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 9581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "RATE_DENOMINATOR", + "nodeType": "MemberAccess", + "referencedDeclaration": 278, + "src": "2673:27:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 9582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2673:29:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2653:49:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9584, + "nodeType": "ExpressionStatement", + "src": "2653:49:58" + }, + { + "expression": { + "id": 9591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9585, + "name": "_period", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9514, + "src": "2863:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "arguments": [ + { + "id": 9588, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2878:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9587, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2878:7:58", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 9586, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "2873:4:58", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9589, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2873:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 9590, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "2873:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2863:27:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9592, + "nodeType": "ExpressionStatement", + "src": "2863:27:58" + } + ] + }, + "id": 9594, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9523, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9522, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 9594, + "src": "2062:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 9521, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "2062:15:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "internal" + } + ], + "src": "2061:24:58" + }, + "returnParameters": { + "id": 9524, + "nodeType": "ParameterList", + "parameters": [], + "src": "2086:0:58" + }, + "scope": 9961, + "src": "2050:847:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9632, + "nodeType": "Block", + "src": "2998:428:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9598, + "name": "_period", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9514, + "src": "3016:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 9599, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3027:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3016:12:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416c726561647920696e697469616c697a6564", + "id": 9601, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3030:21:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d3814fd4e72cfd7651525eee846049aca388165c613a1085fb56751abcdd36c0", + "typeString": "literal_string \"Already initialized\"" + }, + "value": "Already initialized" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d3814fd4e72cfd7651525eee846049aca388165c613a1085fb56751abcdd36c0", + "typeString": "literal_string \"Already initialized\"" + } + ], + "id": 9597, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3008:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3008:44:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9603, + "nodeType": "ExpressionStatement", + "src": "3008:44:58" + }, + { + "assignments": [ + 9605 + ], + "declarations": [ + { + "constant": false, + "id": 9605, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 9632, + "src": "3198:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9604, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3198:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9609, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9606, + "name": "_tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9492, + "src": "3213:11:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 9607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "rate", + "nodeType": "MemberAccess", + "referencedDeclaration": 292, + "src": "3213:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 9608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3213:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3198:33:58" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9611, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9605, + "src": "3249:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 9612, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3257:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3249:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "42616c616e636572546f6b656e41646d696e206e6f742079657420616374697661746564", + "id": 9614, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3260:38:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c3af94e4df4d68cc54b5719029efd0c3b451a133245658fe212b024c6dfd0ae7", + "typeString": "literal_string \"BalancerTokenAdmin not yet activated\"" + }, + "value": "BalancerTokenAdmin not yet activated" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_c3af94e4df4d68cc54b5719029efd0c3b451a133245658fe212b024c6dfd0ae7", + "typeString": "literal_string \"BalancerTokenAdmin not yet activated\"" + } + ], + "id": 9610, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3241:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3241:58:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9616, + "nodeType": "ExpressionStatement", + "src": "3241:58:58" + }, + { + "expression": { + "id": 9619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9617, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9512, + "src": "3310:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9618, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9605, + "src": "3318:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3310:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9620, + "nodeType": "ExpressionStatement", + "src": "3310:12:58" + }, + { + "expression": { + "id": 9624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9621, + "name": "_period", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9514, + "src": "3332:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9622, + "name": "_currentPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9872, + "src": "3342:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 9623, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3342:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3332:26:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9625, + "nodeType": "ExpressionStatement", + "src": "3332:26:58" + }, + { + "expression": { + "id": 9630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9626, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9516, + "src": "3368:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9627, + "name": "_tokenAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9492, + "src": "3386:11:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerTokenAdmin_$305", + "typeString": "contract IBalancerTokenAdmin" + } + }, + "id": 9628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "startEpochTimeWrite", + "nodeType": "MemberAccess", + "referencedDeclaration": 297, + "src": "3386:31:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$", + "typeString": "function () external returns (uint256)" + } + }, + "id": 9629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3386:33:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3368:51:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9631, + "nodeType": "ExpressionStatement", + "src": "3368:51:58" + } + ] + }, + "id": 9633, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "__StakelessGauge_init", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9595, + "nodeType": "ParameterList", + "parameters": [], + "src": "2986:2:58" + }, + "returnParameters": { + "id": 9596, + "nodeType": "ParameterList", + "parameters": [], + "src": "2998:0:58" + }, + "scope": 9961, + "src": "2956:470:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 919 + ], + "body": { + "id": 9857, + "nodeType": "Block", + "src": "3508:2609:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9642, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3526:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3526:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9646, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9498, + "src": "3548:18:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + ], + "id": 9645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3540:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9644, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3540:7:58", + "typeDescriptions": {} + } + }, + "id": 9647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3540:27:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3526:41:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "53454e4445525f4e4f545f414c4c4f574544", + "id": 9649, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3569:20:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0f05a2cf5de71ee787d02dede9d6e01c9001e823dce70853e36e0c59172dd129", + "typeString": "literal_string \"SENDER_NOT_ALLOWED\"" + }, + "value": "SENDER_NOT_ALLOWED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0f05a2cf5de71ee787d02dede9d6e01c9001e823dce70853e36e0c59172dd129", + "typeString": "literal_string \"SENDER_NOT_ALLOWED\"" + } + ], + "id": 9641, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3518:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3518:72:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9651, + "nodeType": "ExpressionStatement", + "src": "3518:72:58" + }, + { + "assignments": [ + 9653 + ], + "declarations": [ + { + "constant": false, + "id": 9653, + "mutability": "mutable", + "name": "lastPeriod", + "nodeType": "VariableDeclaration", + "scope": 9857, + "src": "3600:18:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9652, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3600:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9655, + "initialValue": { + "id": 9654, + "name": "_period", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9514, + "src": "3621:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3600:28:58" + }, + { + "assignments": [ + 9657 + ], + "declarations": [ + { + "constant": false, + "id": 9657, + "mutability": "mutable", + "name": "currentPeriod", + "nodeType": "VariableDeclaration", + "scope": 9857, + "src": "3638:21:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9656, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3638:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9660, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9658, + "name": "_currentPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9872, + "src": "3662:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 9659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3662:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3638:40:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9663, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9661, + "name": "lastPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "3693:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 9662, + "name": "currentPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9657, + "src": "3706:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3693:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9854, + "nodeType": "IfStatement", + "src": "3689:2400:58", + "trueBody": { + "id": 9853, + "nodeType": "Block", + "src": "3721:2368:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9669, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3777:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + ], + "id": 9668, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3769:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9667, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3769:7:58", + "typeDescriptions": {} + } + }, + "id": 9670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3769:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9664, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9496, + "src": "3735:16:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 9666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "checkpoint_gauge", + "nodeType": "MemberAccess", + "referencedDeclaration": 662, + "src": "3735:33:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", + "typeString": "function (address) external" + } + }, + "id": 9671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3735:48:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9672, + "nodeType": "ExpressionStatement", + "src": "3735:48:58" + }, + { + "assignments": [ + 9674 + ], + "declarations": [ + { + "constant": false, + "id": 9674, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 9853, + "src": "3798:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9673, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3798:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9676, + "initialValue": { + "id": 9675, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9512, + "src": "3813:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3798:20:58" + }, + { + "assignments": [ + 9678 + ], + "declarations": [ + { + "constant": false, + "id": 9678, + "mutability": "mutable", + "name": "newEmissions", + "nodeType": "VariableDeclaration", + "scope": 9853, + "src": "3832:20:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9677, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3832:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9680, + "initialValue": { + "hexValue": "30", + "id": 9679, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3855:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "3832:24:58" + }, + { + "expression": { + "id": 9683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9681, + "name": "lastPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "3870:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 9682, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3884:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3870:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9684, + "nodeType": "ExpressionStatement", + "src": "3870:15:58" + }, + { + "assignments": [ + 9686 + ], + "declarations": [ + { + "constant": false, + "id": 9686, + "mutability": "mutable", + "name": "nextEpochTime", + "nodeType": "VariableDeclaration", + "scope": 9853, + "src": "3899:21:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9685, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3899:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9690, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9687, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9516, + "src": "3923:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 9688, + "name": "_RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9506, + "src": "3941:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3923:38:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3899:62:58" + }, + { + "body": { + "id": 9822, + "nodeType": "Block", + "src": "4031:1813:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9703, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9692, + "src": "4053:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 9704, + "name": "currentPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9657, + "src": "4057:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4053:17:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9707, + "nodeType": "IfStatement", + "src": "4049:28:58", + "trueBody": { + "id": 9706, + "nodeType": "Break", + "src": "4072:5:58" + } + }, + { + "assignments": [ + 9709 + ], + "declarations": [ + { + "constant": false, + "id": 9709, + "mutability": "mutable", + "name": "periodTime", + "nodeType": "VariableDeclaration", + "scope": 9822, + "src": "4096:18:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4096:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9713, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9710, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9692, + "src": "4117:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "31", + "id": 9711, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4121:7:58", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "4117:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4096:32:58" + }, + { + "assignments": [ + 9715 + ], + "declarations": [ + { + "constant": false, + "id": 9715, + "mutability": "mutable", + "name": "periodEmission", + "nodeType": "VariableDeclaration", + "scope": 9822, + "src": "4146:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9714, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4146:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9717, + "initialValue": { + "hexValue": "30", + "id": 9716, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4171:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4146:26:58" + }, + { + "assignments": [ + 9719 + ], + "declarations": [ + { + "constant": false, + "id": 9719, + "mutability": "mutable", + "name": "gaugeWeight", + "nodeType": "VariableDeclaration", + "scope": 9822, + "src": "4190:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9718, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4190:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9728, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 9724, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4259:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + ], + "id": 9723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4251:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9722, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4251:7:58", + "typeDescriptions": {} + } + }, + "id": 9725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4251:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9726, + "name": "periodTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9709, + "src": "4266:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9720, + "name": "_gaugeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9496, + "src": "4212:16:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 9721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "gauge_relative_weight", + "nodeType": "MemberAccess", + "referencedDeclaration": 671, + "src": "4212:38:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (address,uint256) external returns (uint256)" + } + }, + "id": 9727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4212:65:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4190:87:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9729, + "name": "nextEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9686, + "src": "4300:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 9730, + "name": "periodTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9709, + "src": "4317:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4300:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9732, + "name": "nextEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9686, + "src": "4331:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9733, + "name": "periodTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9709, + "src": "4347:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 9734, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4360:7:58", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "4347:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4331:36:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4300:67:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9811, + "nodeType": "Block", + "src": "5623:97:58", + "statements": [ + { + "expression": { + "id": 9809, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9798, + "name": "periodEmission", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9715, + "src": "5645:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9799, + "name": "gaugeWeight", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9719, + "src": "5663:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 9800, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9674, + "src": "5677:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5663:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "31", + "id": 9802, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5684:7:58", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "5663:28:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9804, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5662:30:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "id": 9807, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 9805, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5695:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3138", + "id": 9806, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5699:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "src": "5695:6:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + } + }, + "src": "5662:39:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5645:56:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9810, + "nodeType": "ExpressionStatement", + "src": "5645:56:58" + } + ] + }, + "id": 9812, + "nodeType": "IfStatement", + "src": "4296:1424:58", + "trueBody": { + "id": 9797, + "nodeType": "Block", + "src": "4369:1248:58", + "statements": [ + { + "assignments": [ + 9739 + ], + "declarations": [ + { + "constant": false, + "id": 9739, + "mutability": "mutable", + "name": "durationInCurrentEpoch", + "nodeType": "VariableDeclaration", + "scope": 9797, + "src": "4913:30:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9738, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4913:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9743, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9740, + "name": "nextEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9686, + "src": "4946:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 9741, + "name": "periodTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9709, + "src": "4962:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4946:26:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4913:59:58" + }, + { + "expression": { + "id": 9755, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9744, + "name": "periodEmission", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9715, + "src": "4994:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9745, + "name": "gaugeWeight", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9719, + "src": "5012:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 9746, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9674, + "src": "5026:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5012:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 9748, + "name": "durationInCurrentEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9739, + "src": "5033:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5012:43:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9750, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5011:45:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "id": 9753, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 9751, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5059:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3138", + "id": 9752, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5063:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "src": "5059:6:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + } + }, + "src": "5011:54:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4994:71:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9756, + "nodeType": "ExpressionStatement", + "src": "4994:71:58" + }, + { + "expression": { + "id": 9764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9757, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9674, + "src": "5138:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9758, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9674, + "src": "5146:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 9759, + "name": "_RATE_DENOMINATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9510, + "src": "5153:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5146:24:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9761, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5145:26:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 9762, + "name": "_RATE_REDUCTION_COEFFICIENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9508, + "src": "5174:27:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5145:56:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5138:63:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9765, + "nodeType": "ExpressionStatement", + "src": "5138:63:58" + }, + { + "assignments": [ + 9767 + ], + "declarations": [ + { + "constant": false, + "id": 9767, + "mutability": "mutable", + "name": "durationInNewEpoch", + "nodeType": "VariableDeclaration", + "scope": 9797, + "src": "5300:26:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9766, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5300:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9771, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9770, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 9768, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5329:7:58", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 9769, + "name": "durationInCurrentEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9739, + "src": "5339:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5329:32:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5300:61:58" + }, + { + "expression": { + "id": 9783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9772, + "name": "periodEmission", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9715, + "src": "5383:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9773, + "name": "gaugeWeight", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9719, + "src": "5402:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 9774, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9674, + "src": "5416:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5402:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 9776, + "name": "durationInNewEpoch", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9767, + "src": "5423:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5402:39:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9778, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5401:41:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "id": 9781, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 9779, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5445:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "3138", + "id": 9780, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5449:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "src": "5445:6:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + } + }, + "src": "5401:50:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5383:68:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9784, + "nodeType": "ExpressionStatement", + "src": "5383:68:58" + }, + { + "expression": { + "id": 9787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9785, + "name": "_rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9512, + "src": "5474:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9786, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9674, + "src": "5482:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5474:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9788, + "nodeType": "ExpressionStatement", + "src": "5474:12:58" + }, + { + "expression": { + "id": 9791, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9789, + "name": "_startEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9516, + "src": "5508:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9790, + "name": "nextEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9686, + "src": "5526:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5508:31:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9792, + "nodeType": "ExpressionStatement", + "src": "5508:31:58" + }, + { + "expression": { + "id": 9795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9793, + "name": "nextEpochTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9686, + "src": "5561:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 9794, + "name": "_RATE_REDUCTION_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9506, + "src": "5578:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5561:37:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9796, + "nodeType": "ExpressionStatement", + "src": "5561:37:58" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 9814, + "name": "periodTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9709, + "src": "5754:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9815, + "name": "periodEmission", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9715, + "src": "5766:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9813, + "name": "Checkpoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9504, + "src": "5743:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 9816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5743:38:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9817, + "nodeType": "EmitStatement", + "src": "5738:43:58" + }, + { + "expression": { + "id": 9820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9818, + "name": "newEmissions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9678, + "src": "5799:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 9819, + "name": "periodEmission", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9715, + "src": "5815:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5799:30:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9821, + "nodeType": "ExpressionStatement", + "src": "5799:30:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9695, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9692, + "src": "4004:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9696, + "name": "lastPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "4008:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "323535", + "id": 9697, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4021:3:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "4008:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4004:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9823, + "initializationExpression": { + "assignments": [ + 9692 + ], + "declarations": [ + { + "constant": false, + "id": 9692, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 9823, + "src": "3980:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9691, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3980:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9694, + "initialValue": { + "id": 9693, + "name": "lastPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "3992:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3980:22:58" + }, + "loopExpression": { + "expression": { + "id": 9701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "4026:3:58", + "subExpression": { + "id": 9700, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9692, + "src": "4028:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9702, + "nodeType": "ExpressionStatement", + "src": "4026:3:58" + }, + "nodeType": "ForStatement", + "src": "3975:1869:58" + }, + { + "expression": { + "id": 9826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9824, + "name": "_period", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9514, + "src": "5858:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9825, + "name": "currentPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9657, + "src": "5868:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5858:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9827, + "nodeType": "ExpressionStatement", + "src": "5858:23:58" + }, + { + "expression": { + "id": 9830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9828, + "name": "_emissions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9518, + "src": "5895:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 9829, + "name": "newEmissions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9678, + "src": "5909:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5895:26:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9831, + "nodeType": "ExpressionStatement", + "src": "5895:26:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9832, + "name": "newEmissions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9678, + "src": "5940:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9833, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5955:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5940:16:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 9836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5960:10:58", + "subExpression": { + "id": 9835, + "name": "_isKilled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9520, + "src": "5961:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5940:30:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9852, + "nodeType": "IfStatement", + "src": "5936:143:58", + "trueBody": { + "id": 9851, + "nodeType": "Block", + "src": "5972:107:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9843, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "6011:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + ], + "id": 9842, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6003:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9841, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6003:7:58", + "typeDescriptions": {} + } + }, + "id": 9844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6003:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9838, + "name": "_minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9494, + "src": "5990:7:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "id": 9840, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mint", + "nodeType": "MemberAccess", + "referencedDeclaration": 66, + "src": "5990:12:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) external returns (uint256)" + } + }, + "id": 9845, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5990:27:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9846, + "nodeType": "ExpressionStatement", + "src": "5990:27:58" + }, + { + "expression": { + "arguments": [ + { + "id": 9848, + "name": "newEmissions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9678, + "src": "6051:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9847, + "name": "_postMintAction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9877, + "src": "6035:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 9849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6035:29:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9850, + "nodeType": "ExpressionStatement", + "src": "6035:29:58" + } + ] + } + } + ] + } + }, + { + "expression": { + "hexValue": "74727565", + "id": 9855, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6106:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9640, + "id": 9856, + "nodeType": "Return", + "src": "6099:11:58" + } + ] + }, + "functionSelector": "c2c4c5c1", + "id": 9858, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 9637, + "modifierName": { + "id": 9636, + "name": "nonReentrant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4396, + "src": "3480:12:58", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3480:12:58" + } + ], + "name": "checkpoint", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9635, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3471:8:58" + }, + "parameters": { + "id": 9634, + "nodeType": "ParameterList", + "parameters": [], + "src": "3451:2:58" + }, + "returnParameters": { + "id": 9640, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9639, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9858, + "src": "3502:4:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9638, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3502:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3501:6:58" + }, + "scope": 9961, + "src": "3432:2685:58", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9871, + "nodeType": "Block", + "src": "6181:109:58", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9863, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6253:5:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 9864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6253:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "31", + "id": 9865, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6271:7:58", + "subdenomination": "weeks", + "typeDescriptions": { + "typeIdentifier": "t_rational_604800_by_1", + "typeString": "int_const 604800" + }, + "value": "1" + }, + "src": "6253:25:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9867, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6252:27:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 9868, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6282:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "6252:31:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9862, + "id": 9870, + "nodeType": "Return", + "src": "6245:38:58" + } + ] + }, + "id": 9872, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_currentPeriod", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9859, + "nodeType": "ParameterList", + "parameters": [], + "src": "6146:2:58" + }, + "returnParameters": { + "id": 9862, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9861, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9872, + "src": "6172:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9860, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6172:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6171:9:58" + }, + "scope": 9961, + "src": "6123:167:58", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 9877, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_postMintAction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9875, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9874, + "mutability": "mutable", + "name": "mintAmount", + "nodeType": "VariableDeclaration", + "scope": 9877, + "src": "6321:18:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9873, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6321:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6320:20:58" + }, + "returnParameters": { + "id": 9876, + "nodeType": "ParameterList", + "parameters": [], + "src": "6357:0:58" + }, + "scope": 9961, + "src": "6296:62:58", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 736 + ], + "body": { + "id": 9887, + "nodeType": "Block", + "src": "6480:28:58", + "statements": [ + { + "expression": { + "hexValue": "74727565", + "id": 9885, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6497:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9884, + "id": 9886, + "nodeType": "Return", + "src": "6490:11:58" + } + ] + }, + "functionSelector": "4b820093", + "id": 9888, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "user_checkpoint", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9881, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6456:8:58" + }, + "parameters": { + "id": 9880, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9879, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9888, + "src": "6433:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9878, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6433:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6432:9:58" + }, + "returnParameters": { + "id": 9884, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9883, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9888, + "src": "6474:4:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9882, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6474:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6473:6:58" + }, + "scope": 9961, + "src": "6408:100:58", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 729 + ], + "body": { + "id": 9908, + "nodeType": "Block", + "src": "6597:108:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9897, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9890, + "src": "6615:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9900, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "6631:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + ], + "id": 9899, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6623:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9898, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6623:7:58", + "typeDescriptions": {} + } + }, + "id": 9901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6623:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6615:21:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "47617567652063616e206f6e6c79206d696e7420666f7220697473656c66", + "id": 9903, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6638:32:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f4e4fe179fd12da350e7bb8ec0880d9e8b3a006c5241edb45e89d14d3fb1458d", + "typeString": "literal_string \"Gauge can only mint for itself\"" + }, + "value": "Gauge can only mint for itself" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f4e4fe179fd12da350e7bb8ec0880d9e8b3a006c5241edb45e89d14d3fb1458d", + "typeString": "literal_string \"Gauge can only mint for itself\"" + } + ], + "id": 9896, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6607:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6607:64:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9905, + "nodeType": "ExpressionStatement", + "src": "6607:64:58" + }, + { + "expression": { + "id": 9906, + "name": "_emissions", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9518, + "src": "6688:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9895, + "id": 9907, + "nodeType": "Return", + "src": "6681:17:58" + } + ] + }, + "functionSelector": "09400707", + "id": 9909, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "integrate_fraction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9892, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6570:8:58" + }, + "parameters": { + "id": 9891, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9890, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 9909, + "src": "6542:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9889, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6542:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6541:14:58" + }, + "returnParameters": { + "id": 9895, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9894, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9909, + "src": "6588:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9893, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6588:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6587:9:58" + }, + "scope": 9961, + "src": "6514:191:58", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 741 + ], + "body": { + "id": 9917, + "nodeType": "Block", + "src": "6770:33:58", + "statements": [ + { + "expression": { + "id": 9915, + "name": "_isKilled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9520, + "src": "6787:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 9914, + "id": 9916, + "nodeType": "Return", + "src": "6780:16:58" + } + ] + }, + "functionSelector": "9c868ac0", + "id": 9918, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "is_killed", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9911, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6746:8:58" + }, + "parameters": { + "id": 9910, + "nodeType": "ParameterList", + "parameters": [], + "src": "6729:2:58" + }, + "returnParameters": { + "id": 9914, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9913, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9918, + "src": "6764:4:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9912, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6764:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6763:6:58" + }, + "scope": 9961, + "src": "6711:92:58", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 744 + ], + "body": { + "id": 9938, + "nodeType": "Block", + "src": "6917:115:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9924, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6935:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "6935:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9928, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9498, + "src": "6957:18:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + ], + "id": 9927, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6949:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9926, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6949:7:58", + "typeDescriptions": {} + } + }, + "id": 9929, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6949:27:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6935:41:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "53454e4445525f4e4f545f414c4c4f574544", + "id": 9931, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6978:20:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0f05a2cf5de71ee787d02dede9d6e01c9001e823dce70853e36e0c59172dd129", + "typeString": "literal_string \"SENDER_NOT_ALLOWED\"" + }, + "value": "SENDER_NOT_ALLOWED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0f05a2cf5de71ee787d02dede9d6e01c9001e823dce70853e36e0c59172dd129", + "typeString": "literal_string \"SENDER_NOT_ALLOWED\"" + } + ], + "id": 9923, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6927:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6927:72:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9933, + "nodeType": "ExpressionStatement", + "src": "6927:72:58" + }, + { + "expression": { + "id": 9936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9934, + "name": "_isKilled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9520, + "src": "7009:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 9935, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7021:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "7009:16:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9937, + "nodeType": "ExpressionStatement", + "src": "7009:16:58" + } + ] + }, + "documentation": { + "id": 9919, + "nodeType": "StructuredDocumentation", + "src": "6809:64:58", + "text": " @notice Kills the gauge so it cannot mint BAL" + }, + "functionSelector": "ab8f0945", + "id": 9939, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "killGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9921, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6908:8:58" + }, + "parameters": { + "id": 9920, + "nodeType": "ParameterList", + "parameters": [], + "src": "6896:2:58" + }, + "returnParameters": { + "id": 9922, + "nodeType": "ParameterList", + "parameters": [], + "src": "6917:0:58" + }, + "scope": 9961, + "src": "6878:154:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 747 + ], + "body": { + "id": 9959, + "nodeType": "Block", + "src": "7153:116:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9945, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7171:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9946, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "7171:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9949, + "name": "_authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9498, + "src": "7193:18:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + ], + "id": 9948, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7185:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9947, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7185:7:58", + "typeDescriptions": {} + } + }, + "id": 9950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7185:27:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7171:41:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "53454e4445525f4e4f545f414c4c4f574544", + "id": 9952, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7214:20:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0f05a2cf5de71ee787d02dede9d6e01c9001e823dce70853e36e0c59172dd129", + "typeString": "literal_string \"SENDER_NOT_ALLOWED\"" + }, + "value": "SENDER_NOT_ALLOWED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0f05a2cf5de71ee787d02dede9d6e01c9001e823dce70853e36e0c59172dd129", + "typeString": "literal_string \"SENDER_NOT_ALLOWED\"" + } + ], + "id": 9944, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7163:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7163:72:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9954, + "nodeType": "ExpressionStatement", + "src": "7163:72:58" + }, + { + "expression": { + "id": 9957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9955, + "name": "_isKilled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9520, + "src": "7245:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "66616c7365", + "id": 9956, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7257:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "7245:17:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9958, + "nodeType": "ExpressionStatement", + "src": "7245:17:58" + } + ] + }, + "documentation": { + "id": 9940, + "nodeType": "StructuredDocumentation", + "src": "7038:69:58", + "text": " @notice Unkills the gauge so it can mint BAL again" + }, + "functionSelector": "d34fb267", + "id": 9960, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "unkillGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9942, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7144:8:58" + }, + "parameters": { + "id": 9941, + "nodeType": "ParameterList", + "parameters": [], + "src": "7132:2:58" + }, + "returnParameters": { + "id": 9943, + "nodeType": "ParameterList", + "parameters": [], + "src": "7153:0:58" + }, + "scope": 9961, + "src": "7112:157:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 9962, + "src": "1238:6033:58" + } + ], + "src": "688:6584:58" + }, + "id": 58 + }, + "contracts/gauges/arbitrum/ArbitrumRootGauge.sol": { + "ast": { + "absolutePath": "contracts/gauges/arbitrum/ArbitrumRootGauge.sol", + "exportedSymbols": { + "ArbitrumRootGauge": [ + 10134 + ] + }, + "id": 10135, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9963, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:59" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "id": 9964, + "nodeType": "ImportDirective", + "scope": 10135, + "sourceUnit": 877, + "src": "713:91:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/StakelessGauge.sol", + "file": "../StakelessGauge.sol", + "id": 9965, + "nodeType": "ImportDirective", + "scope": 10135, + "sourceUnit": 9962, + "src": "806:31:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/arbitrum/IGatewayRouter.sol", + "file": "./IGatewayRouter.sol", + "id": 9966, + "nodeType": "ImportDirective", + "scope": 10135, + "sourceUnit": 10427, + "src": "838:30:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/arbitrum/IArbitrumFeeProvider.sol", + "file": "./IArbitrumFeeProvider.sol", + "id": 9967, + "nodeType": "ImportDirective", + "scope": 10135, + "sourceUnit": 10401, + "src": "869:36:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 9968, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "937:21:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 9969, + "nodeType": "InheritanceSpecifier", + "src": "937:21:59" + }, + { + "baseName": { + "id": 9970, + "name": "StakelessGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9961, + "src": "960:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + }, + "id": 9971, + "nodeType": "InheritanceSpecifier", + "src": "960:14:59" + } + ], + "contractDependencies": [ + 748, + 876, + 920, + 4421, + 9961 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10134, + "linearizedBaseContracts": [ + 10134, + 9961, + 4421, + 876, + 920, + 748 + ], + "name": "ArbitrumRootGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 9973, + "mutability": "immutable", + "name": "_gateway", + "nodeType": "VariableDeclaration", + "scope": 10134, + "src": "981:34:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9972, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "981:7:59", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9975, + "mutability": "immutable", + "name": "_gatewayRouter", + "nodeType": "VariableDeclaration", + "scope": 10134, + "src": "1021:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + }, + "typeName": { + "id": 9974, + "name": "IGatewayRouter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10426, + "src": "1021:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9977, + "mutability": "immutable", + "name": "_factory", + "nodeType": "VariableDeclaration", + "scope": 10134, + "src": "1074:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + }, + "typeName": { + "id": 9976, + "name": "IArbitrumFeeProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10400, + "src": "1074:20:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9979, + "mutability": "mutable", + "name": "_recipient", + "nodeType": "VariableDeclaration", + "scope": 10134, + "src": "1128:26:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9978, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1128:7:59", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 10012, + "nodeType": "Block", + "src": "1250:181:59", + "statements": [ + { + "expression": { + "id": 9999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9989, + "name": "_gateway", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9973, + "src": "1260:8:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9994, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9981, + "src": "1304:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "id": 9995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getBalancerToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 46, + "src": "1304:23:59", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IERC20_$1650_$", + "typeString": "function () view external returns (contract IERC20)" + } + }, + "id": 9996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1304:25:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + ], + "id": 9993, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1296:7:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9992, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1296:7:59", + "typeDescriptions": {} + } + }, + "id": 9997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1296:34:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 9990, + "name": "gatewayRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9983, + "src": "1271:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "id": 9991, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getGateway", + "nodeType": "MemberAccess", + "referencedDeclaration": 10425, + "src": "1271:24:59", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", + "typeString": "function (address) view external returns (address)" + } + }, + "id": 9998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1271:60:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1260:71:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10000, + "nodeType": "ExpressionStatement", + "src": "1260:71:59" + }, + { + "expression": { + "id": 10003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10001, + "name": "_gatewayRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9975, + "src": "1341:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10002, + "name": "gatewayRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9983, + "src": "1358:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "src": "1341:30:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "id": 10004, + "nodeType": "ExpressionStatement", + "src": "1341:30:59" + }, + { + "expression": { + "id": 10010, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10005, + "name": "_factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9977, + "src": "1381:8:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 10007, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1413:3:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 10008, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1413:10:59", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 10006, + "name": "IArbitrumFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10400, + "src": "1392:20:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IArbitrumFeeProvider_$10400_$", + "typeString": "type(contract IArbitrumFeeProvider)" + } + }, + "id": 10009, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1392:32:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + } + }, + "src": "1381:43:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + } + }, + "id": 10011, + "nodeType": "ExpressionStatement", + "src": "1381:43:59" + } + ] + }, + "id": 10013, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 9986, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9981, + "src": "1242:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + } + ], + "id": 9987, + "modifierName": { + "id": 9985, + "name": "StakelessGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9961, + "src": "1227:14:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StakelessGauge_$9961_$", + "typeString": "type(contract StakelessGauge)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1227:22:59" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9984, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9981, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 10013, + "src": "1173:22:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 9980, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1173:15:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9983, + "mutability": "mutable", + "name": "gatewayRouter", + "nodeType": "VariableDeclaration", + "scope": 10013, + "src": "1197:28:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + }, + "typeName": { + "id": 9982, + "name": "IGatewayRouter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10426, + "src": "1197:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "visibility": "internal" + } + ], + "src": "1172:54:59" + }, + "returnParameters": { + "id": 9988, + "nodeType": "ParameterList", + "parameters": [], + "src": "1250:0:59" + }, + "scope": 10134, + "src": "1161:270:59", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 870 + ], + "body": { + "id": 10026, + "nodeType": "Block", + "src": "1494:135:59", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10019, + "name": "__StakelessGauge_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9633, + "src": "1566:21:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 10020, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1566:23:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10021, + "nodeType": "ExpressionStatement", + "src": "1566:23:59" + }, + { + "expression": { + "id": 10024, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10022, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9979, + "src": "1600:10:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10023, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10015, + "src": "1613:9:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1600:22:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10025, + "nodeType": "ExpressionStatement", + "src": "1600:22:59" + } + ] + }, + "functionSelector": "c4d66de8", + "id": 10027, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10017, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1485:8:59" + }, + "parameters": { + "id": 10016, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10015, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10027, + "src": "1457:17:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10014, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1457:7:59", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1456:19:59" + }, + "returnParameters": { + "id": 10018, + "nodeType": "ParameterList", + "parameters": [], + "src": "1494:0:59" + }, + "scope": 10134, + "src": "1437:192:59", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 875 + ], + "body": { + "id": 10035, + "nodeType": "Block", + "src": "1700:34:59", + "statements": [ + { + "expression": { + "id": 10033, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9979, + "src": "1717:10:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10032, + "id": 10034, + "nodeType": "Return", + "src": "1710:17:59" + } + ] + }, + "functionSelector": "1b88094d", + "id": 10036, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRecipient", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10029, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1673:8:59" + }, + "parameters": { + "id": 10028, + "nodeType": "ParameterList", + "parameters": [], + "src": "1656:2:59" + }, + "returnParameters": { + "id": 10032, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10031, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10036, + "src": "1691:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10030, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1691:7:59", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1690:9:59" + }, + "scope": 10134, + "src": "1635:99:59", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 9877 + ], + "body": { + "id": 10092, + "nodeType": "Block", + "src": "1803:1370:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10045, + "name": "_gateway", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9973, + "src": "1907:8:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10046, + "name": "mintAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10038, + "src": "1917:10:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10042, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9490, + "src": "1889:9:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 10044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1619, + "src": "1889:17:59", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 10047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1889:39:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10048, + "nodeType": "ExpressionStatement", + "src": "1889:39:59" + }, + { + "assignments": [ + 10050, + 10052, + 10054 + ], + "declarations": [ + { + "constant": false, + "id": 10050, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10092, + "src": "1940:16:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10049, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1940:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10052, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10092, + "src": "1958:16:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10051, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1958:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10054, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10092, + "src": "1976:25:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10053, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1976:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10058, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 10055, + "name": "_factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9977, + "src": "2005:8:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + } + }, + "id": 10056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getArbitrumFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 10399, + "src": "2005:24:59", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function () view external returns (uint256,uint256,uint256)" + } + }, + "id": 10057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2005:26:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1939:92:59" + }, + { + "assignments": [ + 10060 + ], + "declarations": [ + { + "constant": false, + "id": 10060, + "mutability": "mutable", + "name": "totalBridgeCost", + "nodeType": "VariableDeclaration", + "scope": 10092, + "src": "2041:23:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10059, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2041:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10066, + "initialValue": { + "arguments": [ + { + "id": 10062, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10050, + "src": "2087:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10063, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10052, + "src": "2097:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10064, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10054, + "src": "2107:17:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10061, + "name": "_getTotalBridgeCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10133, + "src": "2067:19:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2067:58:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2041:84:59" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10068, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2143:3:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 10069, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "value", + "nodeType": "MemberAccess", + "src": "2143:9:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 10070, + "name": "totalBridgeCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10060, + "src": "2156:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2143:28:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e636f7272656374206d73672e76616c756520706173736564", + "id": 10072, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2173:28:59", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_56d4a48d23c5e1d04e805cebfda5734ae7721ed375a1cc40426062043619622b", + "typeString": "literal_string \"Incorrect msg.value passed\"" + }, + "value": "Incorrect msg.value passed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_56d4a48d23c5e1d04e805cebfda5734ae7721ed375a1cc40426062043619622b", + "typeString": "literal_string \"Incorrect msg.value passed\"" + } + ], + "id": 10067, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2135:7:59", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2135:67:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10074, + "nodeType": "ExpressionStatement", + "src": "2135:67:59" + }, + { + "expression": { + "arguments": [ + { + "id": 10080, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9490, + "src": "3008:9:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "id": 10081, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9979, + "src": "3031:10:59", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10082, + "name": "mintAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10038, + "src": "3055:10:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10083, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10050, + "src": "3079:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10084, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10052, + "src": "3101:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 10087, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10054, + "src": "3134:17:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 10088, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3153:2:59", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "id": 10085, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3123:3:59", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 10086, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "3123:10:59", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 10089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3123:33:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 10075, + "name": "_gatewayRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9975, + "src": "2937:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "id": 10077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "outboundTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 10418, + "src": "2937:31:59", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_contract$_IERC20_$1650_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (contract IERC20,address,uint256,uint256,uint256,bytes memory) payable external" + } + }, + "id": 10079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 10078, + "name": "totalBridgeCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10060, + "src": "2977:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "2937:57:59", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_contract$_IERC20_$1650_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$value", + "typeString": "function (contract IERC20,address,uint256,uint256,uint256,bytes memory) payable external" + } + }, + "id": 10090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2937:229:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10091, + "nodeType": "ExpressionStatement", + "src": "2937:229:59" + } + ] + }, + "id": 10093, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_postMintAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10040, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1794:8:59" + }, + "parameters": { + "id": 10039, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10038, + "mutability": "mutable", + "name": "mintAmount", + "nodeType": "VariableDeclaration", + "scope": 10093, + "src": "1765:18:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10037, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1765:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1764:20:59" + }, + "returnParameters": { + "id": 10041, + "nodeType": "ParameterList", + "parameters": [], + "src": "1803:0:59" + }, + "scope": 10134, + "src": "1740:1433:59", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10114, + "nodeType": "Block", + "src": "3241:184:59", + "statements": [ + { + "assignments": [ + 10099, + 10101, + 10103 + ], + "declarations": [ + { + "constant": false, + "id": 10099, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10114, + "src": "3252:16:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10098, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3252:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10101, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10114, + "src": "3270:16:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10100, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3270:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10103, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10114, + "src": "3288:25:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3288:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10107, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 10104, + "name": "_factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9977, + "src": "3317:8:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + } + }, + "id": 10105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getArbitrumFees", + "nodeType": "MemberAccess", + "referencedDeclaration": 10399, + "src": "3317:24:59", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function () view external returns (uint256,uint256,uint256)" + } + }, + "id": 10106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3317:26:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3251:92:59" + }, + { + "expression": { + "arguments": [ + { + "id": 10109, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10099, + "src": "3380:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10110, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10101, + "src": "3390:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10111, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10103, + "src": "3400:17:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10108, + "name": "_getTotalBridgeCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10133, + "src": "3360:19:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3360:58:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10097, + "id": 10113, + "nodeType": "Return", + "src": "3353:65:59" + } + ] + }, + "functionSelector": "b0245225", + "id": 10115, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTotalBridgeCost", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10094, + "nodeType": "ParameterList", + "parameters": [], + "src": "3206:2:59" + }, + "returnParameters": { + "id": 10097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10096, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10115, + "src": "3232:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10095, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3232:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3231:9:59" + }, + "scope": 10134, + "src": "3179:246:59", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10132, + "nodeType": "Block", + "src": "3585:63:59", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10130, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10126, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10117, + "src": "3602:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 10127, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10119, + "src": "3613:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3602:19:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10129, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10121, + "src": "3624:17:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3602:39:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10125, + "id": 10131, + "nodeType": "Return", + "src": "3595:46:59" + } + ] + }, + "id": 10133, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getTotalBridgeCost", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10122, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10117, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10133, + "src": "3469:16:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10116, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3469:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10119, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10133, + "src": "3495:16:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10118, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3495:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10121, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10133, + "src": "3521:25:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10120, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3521:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3459:93:59" + }, + "returnParameters": { + "id": 10125, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10124, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10133, + "src": "3576:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10123, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3576:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3575:9:59" + }, + "scope": 10134, + "src": "3431:217:59", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 10135, + "src": "907:2743:59" + } + ], + "src": "688:2963:59" + }, + "id": 59 + }, + "contracts/gauges/arbitrum/ArbitrumRootGaugeFactory.sol": { + "ast": { + "absolutePath": "contracts/gauges/arbitrum/ArbitrumRootGaugeFactory.sol", + "exportedSymbols": { + "ArbitrumRootGaugeFactory": [ + 10388 + ] + }, + "id": 10389, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10136, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:60" + }, + { + "id": 10137, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:60" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "id": 10138, + "nodeType": "ImportDirective", + "scope": 10389, + "sourceUnit": 769, + "src": "747:92:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 10139, + "nodeType": "ImportDirective", + "scope": 10389, + "sourceUnit": 2289, + "src": "840:65:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "id": 10140, + "nodeType": "ImportDirective", + "scope": 10389, + "sourceUnit": 2573, + "src": "907:88:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "id": 10141, + "nodeType": "ImportDirective", + "scope": 10389, + "sourceUnit": 3132, + "src": "996:76:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/arbitrum/ArbitrumRootGauge.sol", + "file": "./ArbitrumRootGauge.sol", + "id": 10142, + "nodeType": "ImportDirective", + "scope": 10389, + "sourceUnit": 10135, + "src": "1074:33:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/arbitrum/IArbitrumFeeProvider.sol", + "file": "./IArbitrumFeeProvider.sol", + "id": 10143, + "nodeType": "ImportDirective", + "scope": 10389, + "sourceUnit": 10401, + "src": "1108:36:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 10144, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "1183:22:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "id": 10145, + "nodeType": "InheritanceSpecifier", + "src": "1183:22:60" + }, + { + "baseName": { + "id": 10146, + "name": "IArbitrumFeeProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10400, + "src": "1207:20:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IArbitrumFeeProvider_$10400", + "typeString": "contract IArbitrumFeeProvider" + } + }, + "id": 10147, + "nodeType": "InheritanceSpecifier", + "src": "1207:20:60" + }, + { + "baseName": { + "id": 10148, + "name": "SingletonAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2572, + "src": "1229:23:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$2572", + "typeString": "contract SingletonAuthentication" + } + }, + "id": 10149, + "nodeType": "InheritanceSpecifier", + "src": "1229:23:60" + } + ], + "contractDependencies": [ + 768, + 1520, + 2365, + 2572, + 10134, + 10400 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10388, + "linearizedBaseContracts": [ + 10388, + 2572, + 2365, + 1520, + 10400, + 768 + ], + "name": "ArbitrumRootGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 10151, + "mutability": "mutable", + "name": "_gaugeImplementation", + "nodeType": "VariableDeclaration", + "scope": 10388, + "src": "1259:46:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + }, + "typeName": { + "id": 10150, + "name": "ArbitrumRootGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10134, + "src": "1259:17:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10155, + "mutability": "mutable", + "name": "_isGaugeFromFactory", + "nodeType": "VariableDeclaration", + "scope": 10388, + "src": "1312:52:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 10154, + "keyType": { + "id": 10152, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1320:7:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1312:24:60", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 10153, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1331:4:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10159, + "mutability": "mutable", + "name": "_recipientGauge", + "nodeType": "VariableDeclaration", + "scope": 10388, + "src": "1370:51:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 10158, + "keyType": { + "id": 10156, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1378:7:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1370:27:60", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueType": { + "id": 10157, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1389:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10161, + "mutability": "mutable", + "name": "_gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10388, + "src": "1428:24:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10160, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1428:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10163, + "mutability": "mutable", + "name": "_gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10388, + "src": "1458:24:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10162, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1458:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10165, + "mutability": "mutable", + "name": "_maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10388, + "src": "1488:33:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10164, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1488:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 10171, + "name": "ArbitrumRootGaugeCreated", + "nodeType": "EventDefinition", + "parameters": { + "id": 10170, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10167, + "indexed": true, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10171, + "src": "1559:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10166, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1559:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10169, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10171, + "src": "1582:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10168, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1582:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1558:50:60" + }, + "src": "1528:81:60" + }, + { + "anonymous": false, + "id": 10179, + "name": "ArbitrumFeesModified", + "nodeType": "EventDefinition", + "parameters": { + "id": 10178, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10173, + "indexed": false, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10179, + "src": "1641:16:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10172, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1641:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10175, + "indexed": false, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10179, + "src": "1659:16:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10174, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1659:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10177, + "indexed": false, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10179, + "src": "1677:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10176, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1677:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1640:63:60" + }, + "src": "1614:90:60" + }, + { + "body": { + "id": 10217, + "nodeType": "Block", + "src": "1935:193:60", + "statements": [ + { + "expression": { + "id": 10203, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10197, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10151, + "src": "1945:20:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 10200, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10183, + "src": "1990:6:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + { + "id": 10201, + "name": "gatewayRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10185, + "src": "1998:13:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + ], + "id": 10199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1968:21:60", + "typeDescriptions": { + "typeIdentifier": "t_function_creation_nonpayable$_t_contract$_IBalancerMinter_$175_$_t_contract$_IGatewayRouter_$10426_$returns$_t_contract$_ArbitrumRootGauge_$10134_$", + "typeString": "function (contract IBalancerMinter,contract IGatewayRouter) returns (contract ArbitrumRootGauge)" + }, + "typeName": { + "id": 10198, + "name": "ArbitrumRootGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10134, + "src": "1972:17:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + } + }, + "id": 10202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1968:44:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + }, + "src": "1945:67:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + }, + "id": 10204, + "nodeType": "ExpressionStatement", + "src": "1945:67:60" + }, + { + "expression": { + "id": 10207, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10205, + "name": "_gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10161, + "src": "2023:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10206, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10187, + "src": "2035:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "2023:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 10208, + "nodeType": "ExpressionStatement", + "src": "2023:20:60" + }, + { + "expression": { + "id": 10211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10209, + "name": "_gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10163, + "src": "2053:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10210, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10189, + "src": "2065:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "2053:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 10212, + "nodeType": "ExpressionStatement", + "src": "2053:20:60" + }, + { + "expression": { + "id": 10215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10213, + "name": "_maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10165, + "src": "2083:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10214, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10191, + "src": "2104:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "2083:38:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 10216, + "nodeType": "ExpressionStatement", + "src": "2083:38:60" + } + ] + }, + "id": 10218, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 10194, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10181, + "src": "1928:5:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + } + ], + "id": 10195, + "modifierName": { + "id": 10193, + "name": "SingletonAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "1904:23:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SingletonAuthentication_$2572_$", + "typeString": "type(contract SingletonAuthentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1904:30:60" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10192, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10181, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 10218, + "src": "1731:12:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + }, + "typeName": { + "id": 10180, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2288, + "src": "1731:6:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2288", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10183, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 10218, + "src": "1753:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 10182, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1753:15:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10185, + "mutability": "mutable", + "name": "gatewayRouter", + "nodeType": "VariableDeclaration", + "scope": 10218, + "src": "1785:28:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + }, + "typeName": { + "id": 10184, + "name": "IGatewayRouter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10426, + "src": "1785:14:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGatewayRouter_$10426", + "typeString": "contract IGatewayRouter" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10187, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10218, + "src": "1823:15:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10186, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1823:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10189, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10218, + "src": "1848:15:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10188, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1848:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10191, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10218, + "src": "1873:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10190, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1873:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "1721:182:60" + }, + "returnParameters": { + "id": 10196, + "nodeType": "ParameterList", + "parameters": [], + "src": "1935:0:60" + }, + "scope": 10388, + "src": "1710:418:60", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 10229, + "nodeType": "Block", + "src": "2299:53:60", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10226, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10151, + "src": "2324:20:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + ], + "id": 10225, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2316:7:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10224, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2316:7:60", + "typeDescriptions": {} + } + }, + "id": 10227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2316:29:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10223, + "id": 10228, + "nodeType": "Return", + "src": "2309:36:60" + } + ] + }, + "documentation": { + "id": 10219, + "nodeType": "StructuredDocumentation", + "src": "2134:96:60", + "text": " @notice Returns the address of the implementation used for gauge deployments." + }, + "functionSelector": "39312dee", + "id": 10230, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeImplementation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10220, + "nodeType": "ParameterList", + "parameters": [], + "src": "2266:2:60" + }, + "returnParameters": { + "id": 10223, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10222, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10230, + "src": "2290:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10221, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2290:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2289:9:60" + }, + "scope": 10388, + "src": "2235:117:60", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 760 + ], + "body": { + "id": 10243, + "nodeType": "Block", + "src": "2523:50:60", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 10239, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10155, + "src": "2540:19:60", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 10241, + "indexExpression": { + "id": 10240, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10233, + "src": "2560:5:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2540:26:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 10238, + "id": 10242, + "nodeType": "Return", + "src": "2533:33:60" + } + ] + }, + "documentation": { + "id": 10231, + "nodeType": "StructuredDocumentation", + "src": "2358:79:60", + "text": " @notice Returns true if `gauge` was created by this factory." + }, + "functionSelector": "ce3cc8bd", + "id": 10244, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10235, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2499:8:60" + }, + "parameters": { + "id": 10234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10233, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10244, + "src": "2470:13:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10232, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2470:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2469:15:60" + }, + "returnParameters": { + "id": 10238, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10237, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10244, + "src": "2517:4:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10236, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2517:4:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2516:6:60" + }, + "scope": 10388, + "src": "2442:131:60", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10258, + "nodeType": "Block", + "src": "2748:67:60", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 10253, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10159, + "src": "2781:15:60", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10255, + "indexExpression": { + "id": 10254, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10247, + "src": "2797:9:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2781:26:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10252, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "2765:15:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 10256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2765:43:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 10251, + "id": 10257, + "nodeType": "Return", + "src": "2758:50:60" + } + ] + }, + "documentation": { + "id": 10245, + "nodeType": "StructuredDocumentation", + "src": "2579:78:60", + "text": " @notice Returns the gauge which sends funds to `recipient`." + }, + "functionSelector": "7d5d0d10", + "id": 10259, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRecipientGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10247, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10259, + "src": "2689:17:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10246, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2689:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2688:19:60" + }, + "returnParameters": { + "id": 10251, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10250, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10259, + "src": "2731:15:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 10249, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "2731:15:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "2730:17:60" + }, + "scope": 10388, + "src": "2662:153:60", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10273, + "nodeType": "Block", + "src": "2960:67:60", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 10268, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10262, + "src": "2999:5:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10267, + "name": "ISingleRecipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 876, + "src": "2977:21:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ISingleRecipientGauge_$876_$", + "typeString": "type(contract ISingleRecipientGauge)" + } + }, + "id": 10269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2977:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRecipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 875, + "src": "2977:41:60", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 10271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2977:43:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10266, + "id": 10272, + "nodeType": "Return", + "src": "2970:50:60" + } + ] + }, + "documentation": { + "id": 10260, + "nodeType": "StructuredDocumentation", + "src": "2821:60:60", + "text": " @notice Returns the recipient of `gauge`." + }, + "functionSelector": "fa72ce95", + "id": 10274, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeRecipient", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10263, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10262, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10274, + "src": "2913:13:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10261, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2913:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2912:15:60" + }, + "returnParameters": { + "id": 10266, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10265, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10274, + "src": "2951:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10264, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2951:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2950:9:60" + }, + "scope": 10388, + "src": "2886:141:60", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 10399 + ], + "body": { + "id": 10297, + "nodeType": "Block", + "src": "3331:115:60", + "statements": [ + { + "expression": { + "id": 10287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10285, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10279, + "src": "3341:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10286, + "name": "_gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10161, + "src": "3352:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "3341:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10288, + "nodeType": "ExpressionStatement", + "src": "3341:20:60" + }, + { + "expression": { + "id": 10291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10289, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10281, + "src": "3371:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10290, + "name": "_gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10163, + "src": "3382:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "3371:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10292, + "nodeType": "ExpressionStatement", + "src": "3371:20:60" + }, + { + "expression": { + "id": 10295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10293, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10283, + "src": "3401:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10294, + "name": "_maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10165, + "src": "3421:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "3401:38:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10296, + "nodeType": "ExpressionStatement", + "src": "3401:38:60" + } + ] + }, + "documentation": { + "id": 10275, + "nodeType": "StructuredDocumentation", + "src": "3033:89:60", + "text": " @notice Set the fees for the Arbitrum side of the bridging transaction" + }, + "functionSelector": "ac8288c0", + "id": 10298, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getArbitrumFees", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10277, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3192:8:60" + }, + "parameters": { + "id": 10276, + "nodeType": "ParameterList", + "parameters": [], + "src": "3151:2:60" + }, + "returnParameters": { + "id": 10284, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10279, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10298, + "src": "3231:16:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10278, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3231:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10281, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10298, + "src": "3261:16:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10280, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3261:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10283, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10298, + "src": "3291:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10282, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3291:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3217:109:60" + }, + "scope": 10388, + "src": "3127:319:60", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 767 + ], + "body": { + "id": 10355, + "nodeType": "Block", + "src": "3915:385:60", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10308, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10159, + "src": "3933:15:60", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10310, + "indexExpression": { + "id": 10309, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10301, + "src": "3949:9:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3933:26:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10313, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3971:1:60", + "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": 10312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3963:7:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10311, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3963:7:60", + "typeDescriptions": {} + } + }, + "id": 10314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3963:10:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3933:40:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520616c726561647920657869737473", + "id": 10316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3975:22:60", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + }, + "value": "Gauge already exists" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + } + ], + "id": 10307, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3925:7:60", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3925:73:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10318, + "nodeType": "ExpressionStatement", + "src": "3925:73:60" + }, + { + "assignments": [ + 10320 + ], + "declarations": [ + { + "constant": false, + "id": 10320, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10355, + "src": "4009:13:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4009:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 10328, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 10325, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10151, + "src": "4046:20:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + ], + "id": 10324, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4038:7:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10323, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4038:7:60", + "typeDescriptions": {} + } + }, + "id": 10326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4038:29:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 10321, + "name": "Clones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3131, + "src": "4025:6:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Clones_$3131_$", + "typeString": "type(library Clones)" + } + }, + "id": 10322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "clone", + "nodeType": "MemberAccess", + "referencedDeclaration": 3074, + "src": "4025:12:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", + "typeString": "function (address) returns (address)" + } + }, + "id": 10327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4025:43:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4009:59:60" + }, + { + "expression": { + "arguments": [ + { + "id": 10333, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10301, + "src": "4115:9:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 10330, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10320, + "src": "4097:5:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10329, + "name": "ArbitrumRootGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10134, + "src": "4079:17:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ArbitrumRootGauge_$10134_$", + "typeString": "type(contract ArbitrumRootGauge)" + } + }, + "id": 10331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4079:24:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ArbitrumRootGauge_$10134", + "typeString": "contract ArbitrumRootGauge" + } + }, + "id": 10332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "initialize", + "nodeType": "MemberAccess", + "referencedDeclaration": 10027, + "src": "4079:35:60", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", + "typeString": "function (address) external" + } + }, + "id": 10334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4079:46:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10335, + "nodeType": "ExpressionStatement", + "src": "4079:46:60" + }, + { + "expression": { + "id": 10340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10336, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10155, + "src": "4136:19:60", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 10338, + "indexExpression": { + "id": 10337, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10320, + "src": "4156:5:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4136:26:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 10339, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4165:4:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "4136:33:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10341, + "nodeType": "ExpressionStatement", + "src": "4136:33:60" + }, + { + "expression": { + "id": 10346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10342, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10159, + "src": "4179:15:60", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10344, + "indexExpression": { + "id": 10343, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10301, + "src": "4195:9:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4179:26:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10345, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10320, + "src": "4208:5:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4179:34:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10347, + "nodeType": "ExpressionStatement", + "src": "4179:34:60" + }, + { + "eventCall": { + "arguments": [ + { + "id": 10349, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10320, + "src": "4253:5:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10350, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10301, + "src": "4260:9:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10348, + "name": "ArbitrumRootGaugeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10171, + "src": "4228:24:60", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 10351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4228:42:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10352, + "nodeType": "EmitStatement", + "src": "4223:47:60" + }, + { + "expression": { + "id": 10353, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10320, + "src": "4288:5:60", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10306, + "id": 10354, + "nodeType": "Return", + "src": "4281:12:60" + } + ] + }, + "documentation": { + "id": 10299, + "nodeType": "StructuredDocumentation", + "src": "3452:387:60", + "text": " @notice Deploys a new gauge which bridges all of its BAL allowance to a single recipient on Polygon.\n @dev Care must be taken to ensure that gauges deployed from this factory are\n suitable before they are added to the GaugeController.\n @param recipient The address to receive BAL minted from the gauge\n @return The address of the deployed gauge" + }, + "functionSelector": "9ed93318", + "id": 10356, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10303, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3888:8:60" + }, + "parameters": { + "id": 10302, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10301, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10356, + "src": "3860:17:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10300, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3860:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3859:19:60" + }, + "returnParameters": { + "id": 10306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10305, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10356, + "src": "3906:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10304, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3906:7:60", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3905:9:60" + }, + "scope": 10388, + "src": "3844:456:60", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10386, + "nodeType": "Block", + "src": "4537:189:60", + "statements": [ + { + "expression": { + "id": 10370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10368, + "name": "_gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10161, + "src": "4547:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10369, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10359, + "src": "4559:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "4547:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 10371, + "nodeType": "ExpressionStatement", + "src": "4547:20:60" + }, + { + "expression": { + "id": 10374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10372, + "name": "_gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10163, + "src": "4577:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10373, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "4589:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "4577:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 10375, + "nodeType": "ExpressionStatement", + "src": "4577:20:60" + }, + { + "expression": { + "id": 10378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10376, + "name": "_maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10165, + "src": "4607:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10377, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10363, + "src": "4628:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "4607:38:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 10379, + "nodeType": "ExpressionStatement", + "src": "4607:38:60" + }, + { + "eventCall": { + "arguments": [ + { + "id": 10381, + "name": "gasLimit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10359, + "src": "4681:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 10382, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "4691:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 10383, + "name": "maxSubmissionCost", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10363, + "src": "4701:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 10380, + "name": "ArbitrumFeesModified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10179, + "src": "4660:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256)" + } + }, + "id": 10384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4660:59:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10385, + "nodeType": "EmitStatement", + "src": "4655:64:60" + } + ] + }, + "documentation": { + "id": 10357, + "nodeType": "StructuredDocumentation", + "src": "4306:89:60", + "text": " @notice Set the fees for the Arbitrum side of the bridging transaction" + }, + "functionSelector": "e9bde604", + "id": 10387, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10366, + "modifierName": { + "id": 10365, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2316, + "src": "4524:12:60", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4524:12:60" + } + ], + "name": "setArbitrumFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10364, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10359, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10387, + "src": "4434:15:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10358, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4434:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10361, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10387, + "src": "4459:15:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10360, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4459:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10363, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10387, + "src": "4484:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 10362, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4484:6:60", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "4424:90:60" + }, + "returnParameters": { + "id": 10367, + "nodeType": "ParameterList", + "parameters": [], + "src": "4537:0:60" + }, + "scope": 10388, + "src": "4400:326:60", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 10389, + "src": "1146:3582:60" + } + ], + "src": "688:4041:60" + }, + "id": 60 + }, + "contracts/gauges/arbitrum/IArbitrumFeeProvider.sol": { + "ast": { + "absolutePath": "contracts/gauges/arbitrum/IArbitrumFeeProvider.sol", + "exportedSymbols": { + "IArbitrumFeeProvider": [ + 10400 + ] + }, + "id": 10401, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10390, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:61" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 10400, + "linearizedBaseContracts": [ + 10400 + ], + "name": "IArbitrumFeeProvider", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "ac8288c0", + "id": 10399, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getArbitrumFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10391, + "nodeType": "ParameterList", + "parameters": [], + "src": "774:2:61" + }, + "returnParameters": { + "id": 10398, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10393, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10399, + "src": "837:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "837:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10395, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10399, + "src": "867:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "867:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10397, + "mutability": "mutable", + "name": "maxSubmissionCost", + "nodeType": "VariableDeclaration", + "scope": 10399, + "src": "897:25:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10396, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "897:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "823:109:61" + }, + "scope": 10400, + "src": "750:183:61", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 10401, + "src": "713:222:61" + } + ], + "src": "688:248:61" + }, + "id": 61 + }, + "contracts/gauges/arbitrum/IGatewayRouter.sol": { + "ast": { + "absolutePath": "contracts/gauges/arbitrum/IGatewayRouter.sol", + "exportedSymbols": { + "IGatewayRouter": [ + 10426 + ] + }, + "id": 10427, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10402, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:62" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 10403, + "nodeType": "ImportDirective", + "scope": 10427, + "sourceUnit": 1651, + "src": "713:87:62", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 10426, + "linearizedBaseContracts": [ + 10426 + ], + "name": "IGatewayRouter", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "d2ce7d65", + "id": 10418, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "outboundTransfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10416, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10405, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "868:12:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 10404, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "868:6:62", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10407, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "890:17:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10406, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "890:7:62", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10409, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "917:14:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10408, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "917:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10411, + "mutability": "mutable", + "name": "gasLimit", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "941:16:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10410, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "941:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10413, + "mutability": "mutable", + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "967:16:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10412, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "967:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10415, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "993:19:62", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10414, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "993:5:62", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "858:160:62" + }, + "returnParameters": { + "id": 10417, + "nodeType": "ParameterList", + "parameters": [], + "src": "1035:0:62" + }, + "scope": 10426, + "src": "833:203:62", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "bda009fe", + "id": 10425, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGateway", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10420, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 10425, + "src": "1062:13:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10419, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1062:7:62", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1061:15:62" + }, + "returnParameters": { + "id": 10424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10423, + "mutability": "mutable", + "name": "gateway", + "nodeType": "VariableDeclaration", + "scope": 10425, + "src": "1100:15:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10422, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1100:7:62", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1099:17:62" + }, + "scope": 10426, + "src": "1042:75:62", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 10427, + "src": "802:317:62" + } + ], + "src": "688:432:62" + }, + "id": 62 + }, + "contracts/gauges/ethereum/LiquidityGaugeFactory.sol": { + "ast": { + "absolutePath": "contracts/gauges/ethereum/LiquidityGaugeFactory.sol", + "exportedSymbols": { + "LiquidityGaugeFactory": [ + 10557 + ] + }, + "id": 10558, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10428, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:63" + }, + { + "id": 10429, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:63" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol", + "id": 10430, + "nodeType": "ImportDirective", + "scope": 10558, + "sourceUnit": 956, + "src": "747:92:63", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "id": 10431, + "nodeType": "ImportDirective", + "scope": 10558, + "sourceUnit": 769, + "src": "840:92:63", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "id": 10432, + "nodeType": "ImportDirective", + "scope": 10558, + "sourceUnit": 3132, + "src": "934:76:63", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 10433, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "1046:22:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "id": 10434, + "nodeType": "InheritanceSpecifier", + "src": "1046:22:63" + } + ], + "contractDependencies": [ + 768 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10557, + "linearizedBaseContracts": [ + 10557, + 768 + ], + "name": "LiquidityGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 10436, + "mutability": "immutable", + "name": "_gaugeImplementation", + "nodeType": "VariableDeclaration", + "scope": 10557, + "src": "1075:54:63", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 10435, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1075:15:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10440, + "mutability": "mutable", + "name": "_isGaugeFromFactory", + "nodeType": "VariableDeclaration", + "scope": 10557, + "src": "1136:52:63", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 10439, + "keyType": { + "id": 10437, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1144:7:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1136:24:63", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 10438, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1155:4:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10444, + "mutability": "mutable", + "name": "_poolGauge", + "nodeType": "VariableDeclaration", + "scope": 10557, + "src": "1194:46:63", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 10443, + "keyType": { + "id": 10441, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1202:7:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1194:27:63", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueType": { + "id": 10442, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1213:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 10450, + "name": "GaugeCreated", + "nodeType": "EventDefinition", + "parameters": { + "id": 10449, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10446, + "indexed": true, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10450, + "src": "1266:21:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10445, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1266:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10448, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 10450, + "src": "1289:20:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10447, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1289:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1265:45:63" + }, + "src": "1247:64:63" + }, + { + "body": { + "id": 10459, + "nodeType": "Block", + "src": "1352:45:63", + "statements": [ + { + "expression": { + "id": 10457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10455, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10436, + "src": "1362:20:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10456, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10452, + "src": "1385:5:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "src": "1362:28:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "id": 10458, + "nodeType": "ExpressionStatement", + "src": "1362:28:63" + } + ] + }, + "id": 10460, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10452, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10460, + "src": "1329:21:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 10451, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1329:15:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1328:23:63" + }, + "returnParameters": { + "id": 10454, + "nodeType": "ParameterList", + "parameters": [], + "src": "1352:0:63" + }, + "scope": 10557, + "src": "1317:80:63", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 10468, + "nodeType": "Block", + "src": "1576:44:63", + "statements": [ + { + "expression": { + "id": 10466, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10436, + "src": "1593:20:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 10465, + "id": 10467, + "nodeType": "Return", + "src": "1586:27:63" + } + ] + }, + "documentation": { + "id": 10461, + "nodeType": "StructuredDocumentation", + "src": "1403:96:63", + "text": " @notice Returns the address of the implementation used for gauge deployments." + }, + "functionSelector": "39312dee", + "id": 10469, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeImplementation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10462, + "nodeType": "ParameterList", + "parameters": [], + "src": "1535:2:63" + }, + "returnParameters": { + "id": 10465, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10464, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10469, + "src": "1559:15:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 10463, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1559:15:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1558:17:63" + }, + "scope": 10557, + "src": "1504:116:63", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 10483, + "nodeType": "Block", + "src": "1787:57:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 10478, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10444, + "src": "1820:10:63", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10480, + "indexExpression": { + "id": 10479, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10472, + "src": "1831:4:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1820:16:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10477, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "1804:15:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 10481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1804:33:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 10476, + "id": 10482, + "nodeType": "Return", + "src": "1797:40:63" + } + ] + }, + "documentation": { + "id": 10470, + "nodeType": "StructuredDocumentation", + "src": "1626:80:63", + "text": " @notice Returns the address of the gauge belonging to `pool`." + }, + "functionSelector": "a8ea6875", + "id": 10484, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPoolGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10473, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10472, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 10484, + "src": "1733:12:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10471, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1733:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1732:14:63" + }, + "returnParameters": { + "id": 10476, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10475, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10484, + "src": "1770:15:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 10474, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1770:15:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1769:17:63" + }, + "scope": 10557, + "src": "1711:133:63", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 760 + ], + "body": { + "id": 10497, + "nodeType": "Block", + "src": "2015:50:63", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 10493, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10440, + "src": "2032:19:63", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 10495, + "indexExpression": { + "id": 10494, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10487, + "src": "2052:5:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2032:26:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 10492, + "id": 10496, + "nodeType": "Return", + "src": "2025:33:63" + } + ] + }, + "documentation": { + "id": 10485, + "nodeType": "StructuredDocumentation", + "src": "1850:79:63", + "text": " @notice Returns true if `gauge` was created by this factory." + }, + "functionSelector": "ce3cc8bd", + "id": 10498, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10489, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1991:8:63" + }, + "parameters": { + "id": 10488, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10487, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10498, + "src": "1962:13:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10486, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1962:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1961:15:63" + }, + "returnParameters": { + "id": 10492, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10491, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10498, + "src": "2009:4:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10490, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2009:4:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2008:6:63" + }, + "scope": 10557, + "src": "1934:131:63", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 767 + ], + "body": { + "id": 10555, + "nodeType": "Block", + "src": "2712:348:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10508, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10444, + "src": "2730:10:63", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10510, + "indexExpression": { + "id": 10509, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10501, + "src": "2741:4:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2730:16:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10513, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2758:1:63", + "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": 10512, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2750:7:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10511, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2750:7:63", + "typeDescriptions": {} + } + }, + "id": 10514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2750:10:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2730:30:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520616c726561647920657869737473", + "id": 10516, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2762:22:63", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + }, + "value": "Gauge already exists" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + } + ], + "id": 10507, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2722:7:63", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2722:63:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10518, + "nodeType": "ExpressionStatement", + "src": "2722:63:63" + }, + { + "assignments": [ + 10520 + ], + "declarations": [ + { + "constant": false, + "id": 10520, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10555, + "src": "2796:13:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10519, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2796:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 10528, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 10525, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10436, + "src": "2833:20:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + ], + "id": 10524, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2825:7:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10523, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2825:7:63", + "typeDescriptions": {} + } + }, + "id": 10526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2825:29:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 10521, + "name": "Clones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3131, + "src": "2812:6:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Clones_$3131_$", + "typeString": "type(library Clones)" + } + }, + "id": 10522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "clone", + "nodeType": "MemberAccess", + "referencedDeclaration": 3074, + "src": "2812:12:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", + "typeString": "function (address) returns (address)" + } + }, + "id": 10527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2812:43:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2796:59:63" + }, + { + "expression": { + "arguments": [ + { + "id": 10533, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10501, + "src": "2907:4:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 10530, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10520, + "src": "2889:5:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10529, + "name": "IStakingLiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 955, + "src": "2866:22:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IStakingLiquidityGauge_$955_$", + "typeString": "type(contract IStakingLiquidityGauge)" + } + }, + "id": 10531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2866:29:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IStakingLiquidityGauge_$955", + "typeString": "contract IStakingLiquidityGauge" + } + }, + "id": 10532, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "initialize", + "nodeType": "MemberAccess", + "referencedDeclaration": 937, + "src": "2866:40:63", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", + "typeString": "function (address) external" + } + }, + "id": 10534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2866:46:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10535, + "nodeType": "ExpressionStatement", + "src": "2866:46:63" + }, + { + "expression": { + "id": 10540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10536, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10440, + "src": "2923:19:63", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 10538, + "indexExpression": { + "id": 10537, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10520, + "src": "2943:5:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2923:26:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 10539, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2952:4:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2923:33:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10541, + "nodeType": "ExpressionStatement", + "src": "2923:33:63" + }, + { + "expression": { + "id": 10546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10542, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10444, + "src": "2966:10:63", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10544, + "indexExpression": { + "id": 10543, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10501, + "src": "2977:4:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2966:16:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10545, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10520, + "src": "2985:5:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2966:24:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10547, + "nodeType": "ExpressionStatement", + "src": "2966:24:63" + }, + { + "eventCall": { + "arguments": [ + { + "id": 10549, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10520, + "src": "3018:5:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10550, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10501, + "src": "3025:4:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10548, + "name": "GaugeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10450, + "src": "3005:12:63", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 10551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3005:25:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10552, + "nodeType": "EmitStatement", + "src": "3000:30:63" + }, + { + "expression": { + "id": 10553, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10520, + "src": "3048:5:63", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10506, + "id": 10554, + "nodeType": "Return", + "src": "3041:12:63" + } + ] + }, + "documentation": { + "id": 10499, + "nodeType": "StructuredDocumentation", + "src": "2071:570:63", + "text": " @notice Deploys a new gauge for a Balancer pool.\n @dev As anyone can register arbitrary Balancer pools with the Vault,\n it's impossible to prove onchain that `pool` is a \"valid\" deployment.\n Care must be taken to ensure that gauges deployed from this factory are\n suitable before they are added to the GaugeController.\n This factory disallows deploying multiple gauges for a single pool.\n @param pool The address of the pool for which to deploy a gauge\n @return The address of the deployed gauge" + }, + "functionSelector": "9ed93318", + "id": 10556, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10503, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2685:8:63" + }, + "parameters": { + "id": 10502, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10501, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 10556, + "src": "2662:12:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10500, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2662:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2661:14:63" + }, + "returnParameters": { + "id": 10506, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10505, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10556, + "src": "2703:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10504, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2703:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2702:9:63" + }, + "scope": 10557, + "src": "2646:414:63", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 10558, + "src": "1012:2050:63" + } + ], + "src": "688:2375:63" + }, + "id": 63 + }, + "contracts/gauges/ethereum/SingleRecipientGauge.sol": { + "ast": { + "absolutePath": "contracts/gauges/ethereum/SingleRecipientGauge.sol", + "exportedSymbols": { + "SingleRecipientGauge": [ + 10618 + ] + }, + "id": 10619, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10559, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:64" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "id": 10560, + "nodeType": "ImportDirective", + "scope": 10619, + "sourceUnit": 877, + "src": "713:91:64", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeERC20.sol", + "id": 10561, + "nodeType": "ImportDirective", + "scope": 10619, + "sourceUnit": 4517, + "src": "806:79:64", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/StakelessGauge.sol", + "file": "../StakelessGauge.sol", + "id": 10562, + "nodeType": "ImportDirective", + "scope": 10619, + "sourceUnit": 9962, + "src": "887:31:64", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 10563, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "953:21:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10564, + "nodeType": "InheritanceSpecifier", + "src": "953:21:64" + }, + { + "baseName": { + "id": 10565, + "name": "StakelessGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9961, + "src": "976:14:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + }, + "id": 10566, + "nodeType": "InheritanceSpecifier", + "src": "976:14:64" + } + ], + "contractDependencies": [ + 748, + 876, + 920, + 4421, + 9961 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10618, + "linearizedBaseContracts": [ + 10618, + 9961, + 4421, + 876, + 920, + 748 + ], + "name": "SingleRecipientGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 10569, + "libraryName": { + "id": 10567, + "name": "SafeERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4516, + "src": "1003:9:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeERC20_$4516", + "typeString": "library SafeERC20" + } + }, + "nodeType": "UsingForDirective", + "src": "997:27:64", + "typeName": { + "id": 10568, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1017:6:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + } + }, + { + "constant": false, + "id": 10571, + "mutability": "mutable", + "name": "_recipient", + "nodeType": "VariableDeclaration", + "scope": 10618, + "src": "1030:26:64", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10570, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1030:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 10579, + "nodeType": "Block", + "src": "1122:64:64", + "statements": [] + }, + "id": 10580, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 10576, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10573, + "src": "1114:6:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + } + ], + "id": 10577, + "modifierName": { + "id": 10575, + "name": "StakelessGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9961, + "src": "1099:14:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StakelessGauge_$9961_$", + "typeString": "type(contract StakelessGauge)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1099:22:64" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10574, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10573, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 10580, + "src": "1075:22:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 10572, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1075:15:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "internal" + } + ], + "src": "1074:24:64" + }, + "returnParameters": { + "id": 10578, + "nodeType": "ParameterList", + "parameters": [], + "src": "1122:0:64" + }, + "scope": 10618, + "src": "1063:123:64", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 870 + ], + "body": { + "id": 10593, + "nodeType": "Block", + "src": "1249:135:64", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10586, + "name": "__StakelessGauge_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9633, + "src": "1321:21:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 10587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1321:23:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10588, + "nodeType": "ExpressionStatement", + "src": "1321:23:64" + }, + { + "expression": { + "id": 10591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10589, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10571, + "src": "1355:10:64", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10590, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10582, + "src": "1368:9:64", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1355:22:64", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10592, + "nodeType": "ExpressionStatement", + "src": "1355:22:64" + } + ] + }, + "functionSelector": "c4d66de8", + "id": 10594, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10584, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1240:8:64" + }, + "parameters": { + "id": 10583, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10582, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10594, + "src": "1212:17:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10581, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1212:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1211:19:64" + }, + "returnParameters": { + "id": 10585, + "nodeType": "ParameterList", + "parameters": [], + "src": "1249:0:64" + }, + "scope": 10618, + "src": "1192:192:64", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 875 + ], + "body": { + "id": 10602, + "nodeType": "Block", + "src": "1455:34:64", + "statements": [ + { + "expression": { + "id": 10600, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10571, + "src": "1472:10:64", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10599, + "id": 10601, + "nodeType": "Return", + "src": "1465:17:64" + } + ] + }, + "functionSelector": "1b88094d", + "id": 10603, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRecipient", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10596, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1428:8:64" + }, + "parameters": { + "id": 10595, + "nodeType": "ParameterList", + "parameters": [], + "src": "1411:2:64" + }, + "returnParameters": { + "id": 10599, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10598, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10603, + "src": "1446:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10597, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1446:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1445:9:64" + }, + "scope": 10618, + "src": "1390:99:64", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 9877 + ], + "body": { + "id": 10616, + "nodeType": "Block", + "src": "1558:63:64", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10612, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10571, + "src": "1591:10:64", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10613, + "name": "mintAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10605, + "src": "1603:10:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10609, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9490, + "src": "1568:9:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 10611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 4451, + "src": "1568:22:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1650_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1650_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 10614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1568:46:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10615, + "nodeType": "ExpressionStatement", + "src": "1568:46:64" + } + ] + }, + "id": 10617, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_postMintAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10607, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1549:8:64" + }, + "parameters": { + "id": 10606, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10605, + "mutability": "mutable", + "name": "mintAmount", + "nodeType": "VariableDeclaration", + "scope": 10617, + "src": "1520:18:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10604, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1520:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1519:20:64" + }, + "returnParameters": { + "id": 10608, + "nodeType": "ParameterList", + "parameters": [], + "src": "1558:0:64" + }, + "scope": 10618, + "src": "1495:126:64", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 10619, + "src": "920:703:64" + } + ], + "src": "688:936:64" + }, + "id": 64 + }, + "contracts/gauges/ethereum/SingleRecipientGaugeFactory.sol": { + "ast": { + "absolutePath": "contracts/gauges/ethereum/SingleRecipientGaugeFactory.sol", + "exportedSymbols": { + "SingleRecipientGaugeFactory": [ + 10769 + ] + }, + "id": 10770, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10620, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:65" + }, + { + "id": 10621, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:65" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol", + "id": 10622, + "nodeType": "ImportDirective", + "scope": 10770, + "sourceUnit": 900, + "src": "747:98:65", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "id": 10623, + "nodeType": "ImportDirective", + "scope": 10770, + "sourceUnit": 3132, + "src": "847:76:65", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/ethereum/SingleRecipientGauge.sol", + "file": "./SingleRecipientGauge.sol", + "id": 10624, + "nodeType": "ImportDirective", + "scope": 10770, + "sourceUnit": 10619, + "src": "925:36:65", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 10625, + "name": "ISingleRecipientGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 899, + "src": "1003:28:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGaugeFactory_$899", + "typeString": "contract ISingleRecipientGaugeFactory" + } + }, + "id": 10626, + "nodeType": "InheritanceSpecifier", + "src": "1003:28:65" + } + ], + "contractDependencies": [ + 768, + 899, + 10618 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10769, + "linearizedBaseContracts": [ + 10769, + 899, + 768 + ], + "name": "SingleRecipientGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 10628, + "mutability": "mutable", + "name": "_gaugeImplementation", + "nodeType": "VariableDeclaration", + "scope": 10769, + "src": "1038:50:65", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + }, + "typeName": { + "id": 10627, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "1038:21:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10632, + "mutability": "mutable", + "name": "_isGaugeFromFactory", + "nodeType": "VariableDeclaration", + "scope": 10769, + "src": "1095:52:65", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 10631, + "keyType": { + "id": 10629, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1103:7:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1095:24:65", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 10630, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1114:4:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10636, + "mutability": "mutable", + "name": "_recipientGauge", + "nodeType": "VariableDeclaration", + "scope": 10769, + "src": "1153:51:65", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 10635, + "keyType": { + "id": 10633, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1161:7:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1153:27:65", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueType": { + "id": 10634, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1172:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 10642, + "name": "SingleRecipientGaugeCreated", + "nodeType": "EventDefinition", + "parameters": { + "id": 10641, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10638, + "indexed": true, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10642, + "src": "1245:21:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10637, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1245:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10640, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10642, + "src": "1268:25:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10639, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1268:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1244:50:65" + }, + "src": "1211:84:65" + }, + { + "body": { + "id": 10654, + "nodeType": "Block", + "src": "1337:72:65", + "statements": [ + { + "expression": { + "id": 10652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10647, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10628, + "src": "1347:20:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 10650, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10644, + "src": "1395:6:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + ], + "id": 10649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1370:24:65", + "typeDescriptions": { + "typeIdentifier": "t_function_creation_nonpayable$_t_contract$_IBalancerMinter_$175_$returns$_t_contract$_SingleRecipientGauge_$10618_$", + "typeString": "function (contract IBalancerMinter) returns (contract SingleRecipientGauge)" + }, + "typeName": { + "id": 10648, + "name": "SingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10618, + "src": "1374:20:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingleRecipientGauge_$10618", + "typeString": "contract SingleRecipientGauge" + } + } + }, + "id": 10651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1370:32:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingleRecipientGauge_$10618", + "typeString": "contract SingleRecipientGauge" + } + }, + "src": "1347:55:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10653, + "nodeType": "ExpressionStatement", + "src": "1347:55:65" + } + ] + }, + "id": 10655, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10645, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10644, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 10655, + "src": "1313:22:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 10643, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1313:15:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "internal" + } + ], + "src": "1312:24:65" + }, + "returnParameters": { + "id": 10646, + "nodeType": "ParameterList", + "parameters": [], + "src": "1337:0:65" + }, + "scope": 10769, + "src": "1301:108:65", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 10663, + "nodeType": "Block", + "src": "1594:44:65", + "statements": [ + { + "expression": { + "id": 10661, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10628, + "src": "1611:20:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "functionReturnParameters": 10660, + "id": 10662, + "nodeType": "Return", + "src": "1604:27:65" + } + ] + }, + "documentation": { + "id": 10656, + "nodeType": "StructuredDocumentation", + "src": "1415:96:65", + "text": " @notice Returns the address of the implementation used for gauge deployments." + }, + "functionSelector": "39312dee", + "id": 10664, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeImplementation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10657, + "nodeType": "ParameterList", + "parameters": [], + "src": "1547:2:65" + }, + "returnParameters": { + "id": 10660, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10659, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10664, + "src": "1571:21:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + }, + "typeName": { + "id": 10658, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "1571:21:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1570:23:65" + }, + "scope": 10769, + "src": "1516:122:65", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 760 + ], + "body": { + "id": 10677, + "nodeType": "Block", + "src": "1809:50:65", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 10673, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10632, + "src": "1826:19:65", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 10675, + "indexExpression": { + "id": 10674, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10667, + "src": "1846:5:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1826:26:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 10672, + "id": 10676, + "nodeType": "Return", + "src": "1819:33:65" + } + ] + }, + "documentation": { + "id": 10665, + "nodeType": "StructuredDocumentation", + "src": "1644:79:65", + "text": " @notice Returns true if `gauge` was created by this factory." + }, + "functionSelector": "ce3cc8bd", + "id": 10678, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10669, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1785:8:65" + }, + "parameters": { + "id": 10668, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10667, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10678, + "src": "1756:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1756:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1755:15:65" + }, + "returnParameters": { + "id": 10672, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10671, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10678, + "src": "1803:4:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10670, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1803:4:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1802:6:65" + }, + "scope": 10769, + "src": "1728:131:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 890 + ], + "body": { + "id": 10693, + "nodeType": "Block", + "src": "2043:67:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 10688, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10636, + "src": "2076:15:65", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10690, + "indexExpression": { + "id": 10689, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10681, + "src": "2092:9:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2076:26:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10687, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "2060:15:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 10691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2060:43:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 10686, + "id": 10692, + "nodeType": "Return", + "src": "2053:50:65" + } + ] + }, + "documentation": { + "id": 10679, + "nodeType": "StructuredDocumentation", + "src": "1865:78:65", + "text": " @notice Returns the gauge which sends funds to `recipient`." + }, + "functionSelector": "7d5d0d10", + "id": 10694, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRecipientGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10683, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2008:8:65" + }, + "parameters": { + "id": 10682, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10681, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10694, + "src": "1975:17:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10680, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1975:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1974:19:65" + }, + "returnParameters": { + "id": 10686, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10685, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10694, + "src": "2026:15:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 10684, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "2026:15:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "2025:17:65" + }, + "scope": 10769, + "src": "1948:162:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 898 + ], + "body": { + "id": 10709, + "nodeType": "Block", + "src": "2264:67:65", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 10704, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10697, + "src": "2303:5:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10703, + "name": "ISingleRecipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 876, + "src": "2281:21:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ISingleRecipientGauge_$876_$", + "typeString": "type(contract ISingleRecipientGauge)" + } + }, + "id": 10705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2281:28:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRecipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 875, + "src": "2281:41:65", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 10707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2281:43:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10702, + "id": 10708, + "nodeType": "Return", + "src": "2274:50:65" + } + ] + }, + "documentation": { + "id": 10695, + "nodeType": "StructuredDocumentation", + "src": "2116:60:65", + "text": " @notice Returns the recipient of `gauge`." + }, + "functionSelector": "fa72ce95", + "id": 10710, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeRecipient", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10699, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2237:8:65" + }, + "parameters": { + "id": 10698, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10697, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10710, + "src": "2208:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2208:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2207:15:65" + }, + "returnParameters": { + "id": 10702, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10701, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10710, + "src": "2255:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10700, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2255:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2254:9:65" + }, + "scope": 10769, + "src": "2181:150:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 767 + ], + "body": { + "id": 10767, + "nodeType": "Block", + "src": "2787:392:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10720, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10636, + "src": "2805:15:65", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10722, + "indexExpression": { + "id": 10721, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10713, + "src": "2821:9:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2805:26:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10725, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2843:1:65", + "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": 10724, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2835:7:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10723, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2835:7:65", + "typeDescriptions": {} + } + }, + "id": 10726, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2835:10:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2805:40:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520616c726561647920657869737473", + "id": 10728, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2847:22:65", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + }, + "value": "Gauge already exists" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + } + ], + "id": 10719, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2797:7:65", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2797:73:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10730, + "nodeType": "ExpressionStatement", + "src": "2797:73:65" + }, + { + "assignments": [ + 10732 + ], + "declarations": [ + { + "constant": false, + "id": 10732, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10767, + "src": "2881:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10731, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2881:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 10740, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 10737, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10628, + "src": "2918:20:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + ], + "id": 10736, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2910:7:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10735, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2910:7:65", + "typeDescriptions": {} + } + }, + "id": 10738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2910:29:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 10733, + "name": "Clones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3131, + "src": "2897:6:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Clones_$3131_$", + "typeString": "type(library Clones)" + } + }, + "id": 10734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "clone", + "nodeType": "MemberAccess", + "referencedDeclaration": 3074, + "src": "2897:12:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", + "typeString": "function (address) returns (address)" + } + }, + "id": 10739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2897:43:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2881:59:65" + }, + { + "expression": { + "arguments": [ + { + "id": 10745, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10713, + "src": "2991:9:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 10742, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10732, + "src": "2973:5:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10741, + "name": "ISingleRecipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 876, + "src": "2951:21:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ISingleRecipientGauge_$876_$", + "typeString": "type(contract ISingleRecipientGauge)" + } + }, + "id": 10743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2951:28:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10744, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "initialize", + "nodeType": "MemberAccess", + "referencedDeclaration": 870, + "src": "2951:39:65", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", + "typeString": "function (address) external" + } + }, + "id": 10746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2951:50:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10747, + "nodeType": "ExpressionStatement", + "src": "2951:50:65" + }, + { + "expression": { + "id": 10752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10748, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10632, + "src": "3012:19:65", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 10750, + "indexExpression": { + "id": 10749, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10732, + "src": "3032:5:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3012:26:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 10751, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3041:4:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "3012:33:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10753, + "nodeType": "ExpressionStatement", + "src": "3012:33:65" + }, + { + "expression": { + "id": 10758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10754, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10636, + "src": "3055:15:65", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10756, + "indexExpression": { + "id": 10755, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10713, + "src": "3071:9:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3055:26:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10757, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10732, + "src": "3084:5:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3055:34:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10759, + "nodeType": "ExpressionStatement", + "src": "3055:34:65" + }, + { + "eventCall": { + "arguments": [ + { + "id": 10761, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10732, + "src": "3132:5:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10762, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10713, + "src": "3139:9:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10760, + "name": "SingleRecipientGaugeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10642, + "src": "3104:27:65", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 10763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3104:45:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10764, + "nodeType": "EmitStatement", + "src": "3099:50:65" + }, + { + "expression": { + "id": 10765, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10732, + "src": "3167:5:65", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10718, + "id": 10766, + "nodeType": "Return", + "src": "3160:12:65" + } + ] + }, + "documentation": { + "id": 10711, + "nodeType": "StructuredDocumentation", + "src": "2337:374:65", + "text": " @notice Deploys a new gauge which sends all of its BAL allowance to a single recipient.\n @dev Care must be taken to ensure that gauges deployed from this factory are\n suitable before they are added to the GaugeController.\n @param recipient The address to receive BAL minted from the gauge\n @return The address of the deployed gauge" + }, + "functionSelector": "9ed93318", + "id": 10768, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10715, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2760:8:65" + }, + "parameters": { + "id": 10714, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10713, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10768, + "src": "2732:17:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10712, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2732:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2731:19:65" + }, + "returnParameters": { + "id": 10718, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10717, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10768, + "src": "2778:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10716, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2778:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2777:9:65" + }, + "scope": 10769, + "src": "2716:463:65", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 10770, + "src": "963:2218:65" + } + ], + "src": "688:2494:65" + }, + "id": 65 + }, + "contracts/gauges/polygon/PolygonRootGauge.sol": { + "ast": { + "absolutePath": "contracts/gauges/polygon/PolygonRootGauge.sol", + "exportedSymbols": { + "IPolygonRootChainManager": [ + 10783 + ], + "PolygonRootGauge": [ + 10879 + ] + }, + "id": 10880, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10771, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:66" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol", + "id": 10772, + "nodeType": "ImportDirective", + "scope": 10880, + "sourceUnit": 877, + "src": "713:91:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/StakelessGauge.sol", + "file": "../StakelessGauge.sol", + "id": 10773, + "nodeType": "ImportDirective", + "scope": 10880, + "sourceUnit": 9962, + "src": "806:31:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 10783, + "linearizedBaseContracts": [ + 10783 + ], + "name": "IPolygonRootChainManager", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "e3dec8fb", + "id": 10782, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "depositFor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10780, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10775, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 10782, + "src": "909:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10774, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "909:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10777, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 10782, + "src": "931:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 10776, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "931:6:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10779, + "mutability": "mutable", + "name": "depositData", + "nodeType": "VariableDeclaration", + "scope": 10782, + "src": "953:26:66", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10778, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "953:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "899:86:66" + }, + "returnParameters": { + "id": 10781, + "nodeType": "ParameterList", + "parameters": [], + "src": "994:0:66" + }, + "scope": 10783, + "src": "880:115:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 10880, + "src": "839:158:66" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 10784, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "1028:21:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10785, + "nodeType": "InheritanceSpecifier", + "src": "1028:21:66" + }, + { + "baseName": { + "id": 10786, + "name": "StakelessGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9961, + "src": "1051:14:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StakelessGauge_$9961", + "typeString": "contract StakelessGauge" + } + }, + "id": 10787, + "nodeType": "InheritanceSpecifier", + "src": "1051:14:66" + } + ], + "contractDependencies": [ + 748, + 876, + 920, + 4421, + 9961 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10879, + "linearizedBaseContracts": [ + 10879, + 9961, + 4421, + 876, + 920, + 748 + ], + "name": "PolygonRootGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 10789, + "mutability": "immutable", + "name": "_polygonRootChainManager", + "nodeType": "VariableDeclaration", + "scope": 10879, + "src": "1072:67:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + }, + "typeName": { + "id": 10788, + "name": "IPolygonRootChainManager", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10783, + "src": "1072:24:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10791, + "mutability": "immutable", + "name": "_polygonERC20Predicate", + "nodeType": "VariableDeclaration", + "scope": 10879, + "src": "1145:48:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10790, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1145:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10793, + "mutability": "mutable", + "name": "_recipient", + "nodeType": "VariableDeclaration", + "scope": 10879, + "src": "1303:26:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10792, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1303:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 10813, + "nodeType": "Block", + "src": "1506:123:66", + "statements": [ + { + "expression": { + "id": 10807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10805, + "name": "_polygonRootChainManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10789, + "src": "1516:24:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10806, + "name": "polygonRootChainManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10797, + "src": "1543:23:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "src": "1516:50:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "id": 10808, + "nodeType": "ExpressionStatement", + "src": "1516:50:66" + }, + { + "expression": { + "id": 10811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10809, + "name": "_polygonERC20Predicate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10791, + "src": "1576:22:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10810, + "name": "polygonERC20Predicate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10799, + "src": "1601:21:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1576:46:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10812, + "nodeType": "ExpressionStatement", + "src": "1576:46:66" + } + ] + }, + "id": 10814, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 10802, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10795, + "src": "1498:6:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + } + ], + "id": 10803, + "modifierName": { + "id": 10801, + "name": "StakelessGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9961, + "src": "1483:14:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StakelessGauge_$9961_$", + "typeString": "type(contract StakelessGauge)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1483:22:66" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10800, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10795, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 10814, + "src": "1357:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 10794, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1357:15:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10797, + "mutability": "mutable", + "name": "polygonRootChainManager", + "nodeType": "VariableDeclaration", + "scope": 10814, + "src": "1389:48:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + }, + "typeName": { + "id": 10796, + "name": "IPolygonRootChainManager", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10783, + "src": "1389:24:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10799, + "mutability": "mutable", + "name": "polygonERC20Predicate", + "nodeType": "VariableDeclaration", + "scope": 10814, + "src": "1447:29:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10798, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1447:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1347:135:66" + }, + "returnParameters": { + "id": 10804, + "nodeType": "ParameterList", + "parameters": [], + "src": "1506:0:66" + }, + "scope": 10879, + "src": "1336:293:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 870 + ], + "body": { + "id": 10827, + "nodeType": "Block", + "src": "1692:135:66", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10820, + "name": "__StakelessGauge_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9633, + "src": "1764:21:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 10821, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1764:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10822, + "nodeType": "ExpressionStatement", + "src": "1764:23:66" + }, + { + "expression": { + "id": 10825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10823, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10793, + "src": "1798:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10824, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10816, + "src": "1811:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1798:22:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10826, + "nodeType": "ExpressionStatement", + "src": "1798:22:66" + } + ] + }, + "functionSelector": "c4d66de8", + "id": 10828, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10818, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1683:8:66" + }, + "parameters": { + "id": 10817, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10816, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10828, + "src": "1655:17:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10815, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1655:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1654:19:66" + }, + "returnParameters": { + "id": 10819, + "nodeType": "ParameterList", + "parameters": [], + "src": "1692:0:66" + }, + "scope": 10879, + "src": "1635:192:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 875 + ], + "body": { + "id": 10836, + "nodeType": "Block", + "src": "1898:34:66", + "statements": [ + { + "expression": { + "id": 10834, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10793, + "src": "1915:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10833, + "id": 10835, + "nodeType": "Return", + "src": "1908:17:66" + } + ] + }, + "functionSelector": "1b88094d", + "id": 10837, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRecipient", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10830, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1871:8:66" + }, + "parameters": { + "id": 10829, + "nodeType": "ParameterList", + "parameters": [], + "src": "1854:2:66" + }, + "returnParameters": { + "id": 10833, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10832, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "1889:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10831, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1889:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1888:9:66" + }, + "scope": 10879, + "src": "1833:99:66", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10844, + "nodeType": "Block", + "src": "2015:48:66", + "statements": [ + { + "expression": { + "id": 10842, + "name": "_polygonRootChainManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10789, + "src": "2032:24:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "functionReturnParameters": 10841, + "id": 10843, + "nodeType": "Return", + "src": "2025:31:66" + } + ] + }, + "functionSelector": "fe022cc9", + "id": 10845, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPolygonBridge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10838, + "nodeType": "ParameterList", + "parameters": [], + "src": "1963:2:66" + }, + "returnParameters": { + "id": 10841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10840, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10845, + "src": "1989:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + }, + "typeName": { + "id": 10839, + "name": "IPolygonRootChainManager", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10783, + "src": "1989:24:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "visibility": "internal" + } + ], + "src": "1988:26:66" + }, + "scope": 10879, + "src": "1938:125:66", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10852, + "nodeType": "Block", + "src": "2137:46:66", + "statements": [ + { + "expression": { + "id": 10850, + "name": "_polygonERC20Predicate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10791, + "src": "2154:22:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10849, + "id": 10851, + "nodeType": "Return", + "src": "2147:29:66" + } + ] + }, + "functionSelector": "fe33859e", + "id": 10853, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPolygonERC20Predicate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10846, + "nodeType": "ParameterList", + "parameters": [], + "src": "2102:2:66" + }, + "returnParameters": { + "id": 10849, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10848, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10853, + "src": "2128:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10847, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2128:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2127:9:66" + }, + "scope": 10879, + "src": "2069:114:66", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 9877 + ], + "body": { + "id": 10877, + "nodeType": "Block", + "src": "2252:318:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10862, + "name": "_polygonERC20Predicate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10791, + "src": "2364:22:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10863, + "name": "mintAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10855, + "src": "2388:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10859, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9490, + "src": "2346:9:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 10861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1619, + "src": "2346:17:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 10864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2346:53:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10865, + "nodeType": "ExpressionStatement", + "src": "2346:53:66" + }, + { + "expression": { + "arguments": [ + { + "id": 10869, + "name": "_recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10793, + "src": "2517:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10870, + "name": "_balToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9490, + "src": "2529:9:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "arguments": [ + { + "id": 10873, + "name": "mintAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10855, + "src": "2551:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10871, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2540:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 10872, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2540:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 10874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2540:22:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 10866, + "name": "_polygonRootChainManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10789, + "src": "2481:24:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "id": 10868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "depositFor", + "nodeType": "MemberAccess", + "referencedDeclaration": 10782, + "src": "2481:35:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$1650_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,contract IERC20,bytes memory) external" + } + }, + "id": 10875, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2481:82:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10876, + "nodeType": "ExpressionStatement", + "src": "2481:82:66" + } + ] + }, + "id": 10878, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_postMintAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10857, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2243:8:66" + }, + "parameters": { + "id": 10856, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10855, + "mutability": "mutable", + "name": "mintAmount", + "nodeType": "VariableDeclaration", + "scope": 10878, + "src": "2214:18:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10854, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2214:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2213:20:66" + }, + "returnParameters": { + "id": 10858, + "nodeType": "ParameterList", + "parameters": [], + "src": "2252:0:66" + }, + "scope": 10879, + "src": "2189:381:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 10880, + "src": "999:1573:66" + } + ], + "src": "688:1885:66" + }, + "id": 66 + }, + "contracts/gauges/polygon/PolygonRootGaugeFactory.sol": { + "ast": { + "absolutePath": "contracts/gauges/polygon/PolygonRootGaugeFactory.sol", + "exportedSymbols": { + "PolygonRootGaugeFactory": [ + 11036 + ] + }, + "id": 11037, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 10881, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:67" + }, + { + "id": 10882, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:67" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGaugeFactory.sol", + "id": 10883, + "nodeType": "ImportDirective", + "scope": 11037, + "sourceUnit": 900, + "src": "747:98:67", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "id": 10884, + "nodeType": "ImportDirective", + "scope": 11037, + "sourceUnit": 3132, + "src": "847:76:67", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/gauges/polygon/PolygonRootGauge.sol", + "file": "./PolygonRootGauge.sol", + "id": 10885, + "nodeType": "ImportDirective", + "scope": 11037, + "sourceUnit": 10880, + "src": "925:32:67", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 10886, + "name": "ISingleRecipientGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 899, + "src": "995:28:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGaugeFactory_$899", + "typeString": "contract ISingleRecipientGaugeFactory" + } + }, + "id": 10887, + "nodeType": "InheritanceSpecifier", + "src": "995:28:67" + } + ], + "contractDependencies": [ + 768, + 899, + 10879 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 11036, + "linearizedBaseContracts": [ + 11036, + 899, + 768 + ], + "name": "PolygonRootGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 10889, + "mutability": "mutable", + "name": "_gaugeImplementation", + "nodeType": "VariableDeclaration", + "scope": 11036, + "src": "1030:50:67", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + }, + "typeName": { + "id": 10888, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "1030:21:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10893, + "mutability": "mutable", + "name": "_isGaugeFromFactory", + "nodeType": "VariableDeclaration", + "scope": 11036, + "src": "1087:52:67", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 10892, + "keyType": { + "id": 10890, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1095:7:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1087:24:67", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 10891, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1106:4:67", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 10897, + "mutability": "mutable", + "name": "_recipientGauge", + "nodeType": "VariableDeclaration", + "scope": 11036, + "src": "1145:51:67", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 10896, + "keyType": { + "id": 10894, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1153:7:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1145:27:67", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueType": { + "id": 10895, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1164:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 10903, + "name": "PolygonRootGaugeCreated", + "nodeType": "EventDefinition", + "parameters": { + "id": 10902, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10899, + "indexed": true, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10903, + "src": "1233:21:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10898, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1233:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10901, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10903, + "src": "1256:25:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10900, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1256:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1232:50:67" + }, + "src": "1203:80:67" + }, + { + "body": { + "id": 10921, + "nodeType": "Block", + "src": "1436:116:67", + "statements": [ + { + "expression": { + "id": 10919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10912, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10889, + "src": "1446:20:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 10915, + "name": "minter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10905, + "src": "1490:6:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + { + "id": 10916, + "name": "polygonRootChainManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10907, + "src": "1498:23:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + { + "id": 10917, + "name": "polygonERC20Predicate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10909, + "src": "1523:21:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1469:20:67", + "typeDescriptions": { + "typeIdentifier": "t_function_creation_nonpayable$_t_contract$_IBalancerMinter_$175_$_t_contract$_IPolygonRootChainManager_$10783_$_t_address_$returns$_t_contract$_PolygonRootGauge_$10879_$", + "typeString": "function (contract IBalancerMinter,contract IPolygonRootChainManager,address) returns (contract PolygonRootGauge)" + }, + "typeName": { + "id": 10913, + "name": "PolygonRootGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10879, + "src": "1473:16:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_PolygonRootGauge_$10879", + "typeString": "contract PolygonRootGauge" + } + } + }, + "id": 10918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1469:76:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_PolygonRootGauge_$10879", + "typeString": "contract PolygonRootGauge" + } + }, + "src": "1446:99:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10920, + "nodeType": "ExpressionStatement", + "src": "1446:99:67" + } + ] + }, + "id": 10922, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10910, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10905, + "mutability": "mutable", + "name": "minter", + "nodeType": "VariableDeclaration", + "scope": 10922, + "src": "1310:22:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + }, + "typeName": { + "id": 10904, + "name": "IBalancerMinter", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 175, + "src": "1310:15:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBalancerMinter_$175", + "typeString": "contract IBalancerMinter" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10907, + "mutability": "mutable", + "name": "polygonRootChainManager", + "nodeType": "VariableDeclaration", + "scope": 10922, + "src": "1342:48:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + }, + "typeName": { + "id": 10906, + "name": "IPolygonRootChainManager", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10783, + "src": "1342:24:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPolygonRootChainManager_$10783", + "typeString": "contract IPolygonRootChainManager" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10909, + "mutability": "mutable", + "name": "polygonERC20Predicate", + "nodeType": "VariableDeclaration", + "scope": 10922, + "src": "1400:29:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10908, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1400:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1300:135:67" + }, + "returnParameters": { + "id": 10911, + "nodeType": "ParameterList", + "parameters": [], + "src": "1436:0:67" + }, + "scope": 11036, + "src": "1289:263:67", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 10930, + "nodeType": "Block", + "src": "1737:44:67", + "statements": [ + { + "expression": { + "id": 10928, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10889, + "src": "1754:20:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "functionReturnParameters": 10927, + "id": 10929, + "nodeType": "Return", + "src": "1747:27:67" + } + ] + }, + "documentation": { + "id": 10923, + "nodeType": "StructuredDocumentation", + "src": "1558:96:67", + "text": " @notice Returns the address of the implementation used for gauge deployments." + }, + "functionSelector": "39312dee", + "id": 10931, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeImplementation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10924, + "nodeType": "ParameterList", + "parameters": [], + "src": "1690:2:67" + }, + "returnParameters": { + "id": 10927, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10926, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10931, + "src": "1714:21:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + }, + "typeName": { + "id": 10925, + "name": "ISingleRecipientGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 876, + "src": "1714:21:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1713:23:67" + }, + "scope": 11036, + "src": "1659:122:67", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 760 + ], + "body": { + "id": 10944, + "nodeType": "Block", + "src": "1952:50:67", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 10940, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10893, + "src": "1969:19:67", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 10942, + "indexExpression": { + "id": 10941, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10934, + "src": "1989:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1969:26:67", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 10939, + "id": 10943, + "nodeType": "Return", + "src": "1962:33:67" + } + ] + }, + "documentation": { + "id": 10932, + "nodeType": "StructuredDocumentation", + "src": "1787:79:67", + "text": " @notice Returns true if `gauge` was created by this factory." + }, + "functionSelector": "ce3cc8bd", + "id": 10945, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10936, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1928:8:67" + }, + "parameters": { + "id": 10935, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10934, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10945, + "src": "1899:13:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10933, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1899:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1898:15:67" + }, + "returnParameters": { + "id": 10939, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10938, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10945, + "src": "1946:4:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10937, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1946:4:67", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1945:6:67" + }, + "scope": 11036, + "src": "1871:131:67", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 890 + ], + "body": { + "id": 10960, + "nodeType": "Block", + "src": "2186:67:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 10955, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10897, + "src": "2219:15:67", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10957, + "indexExpression": { + "id": 10956, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10948, + "src": "2235:9:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2219:26:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10954, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "2203:15:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 10958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2203:43:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 10953, + "id": 10959, + "nodeType": "Return", + "src": "2196:50:67" + } + ] + }, + "documentation": { + "id": 10946, + "nodeType": "StructuredDocumentation", + "src": "2008:78:67", + "text": " @notice Returns the gauge which sends funds to `recipient`." + }, + "functionSelector": "7d5d0d10", + "id": 10961, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRecipientGauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10950, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2151:8:67" + }, + "parameters": { + "id": 10949, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10948, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 10961, + "src": "2118:17:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10947, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2118:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2117:19:67" + }, + "returnParameters": { + "id": 10953, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10952, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10961, + "src": "2169:15:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 10951, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "2169:15:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "2168:17:67" + }, + "scope": 11036, + "src": "2091:162:67", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 898 + ], + "body": { + "id": 10976, + "nodeType": "Block", + "src": "2407:67:67", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 10971, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10964, + "src": "2446:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10970, + "name": "ISingleRecipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 876, + "src": "2424:21:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ISingleRecipientGauge_$876_$", + "typeString": "type(contract ISingleRecipientGauge)" + } + }, + "id": 10972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2424:28:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 10973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRecipient", + "nodeType": "MemberAccess", + "referencedDeclaration": 875, + "src": "2424:41:67", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 10974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2424:43:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10969, + "id": 10975, + "nodeType": "Return", + "src": "2417:50:67" + } + ] + }, + "documentation": { + "id": 10962, + "nodeType": "StructuredDocumentation", + "src": "2259:60:67", + "text": " @notice Returns the recipient of `gauge`." + }, + "functionSelector": "fa72ce95", + "id": 10977, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGaugeRecipient", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10966, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2380:8:67" + }, + "parameters": { + "id": 10965, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10964, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 10977, + "src": "2351:13:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10963, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2351:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2350:15:67" + }, + "returnParameters": { + "id": 10969, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10968, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10977, + "src": "2398:7:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10967, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2398:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2397:9:67" + }, + "scope": 11036, + "src": "2324:150:67", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 767 + ], + "body": { + "id": 11034, + "nodeType": "Block", + "src": "2943:388:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10987, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10897, + "src": "2961:15:67", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 10989, + "indexExpression": { + "id": 10988, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10980, + "src": "2977:9:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2961:26:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10992, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2999:1:67", + "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": 10991, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2991:7:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10990, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2991:7:67", + "typeDescriptions": {} + } + }, + "id": 10993, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2991:10:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2961:40:67", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520616c726561647920657869737473", + "id": 10995, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3003:22:67", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + }, + "value": "Gauge already exists" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + } + ], + "id": 10986, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2953:7:67", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2953:73:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10997, + "nodeType": "ExpressionStatement", + "src": "2953:73:67" + }, + { + "assignments": [ + 10999 + ], + "declarations": [ + { + "constant": false, + "id": 10999, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 11034, + "src": "3037:13:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10998, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3037:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 11007, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 11004, + "name": "_gaugeImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10889, + "src": "3074:20:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + ], + "id": 11003, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3066:7:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 11002, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3066:7:67", + "typeDescriptions": {} + } + }, + "id": 11005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3066:29:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 11000, + "name": "Clones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3131, + "src": "3053:6:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Clones_$3131_$", + "typeString": "type(library Clones)" + } + }, + "id": 11001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "clone", + "nodeType": "MemberAccess", + "referencedDeclaration": 3074, + "src": "3053:12:67", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", + "typeString": "function (address) returns (address)" + } + }, + "id": 11006, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3053:43:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3037:59:67" + }, + { + "expression": { + "arguments": [ + { + "id": 11012, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10980, + "src": "3147:9:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 11009, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10999, + "src": "3129:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11008, + "name": "ISingleRecipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 876, + "src": "3107:21:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ISingleRecipientGauge_$876_$", + "typeString": "type(contract ISingleRecipientGauge)" + } + }, + "id": 11010, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3107:28:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISingleRecipientGauge_$876", + "typeString": "contract ISingleRecipientGauge" + } + }, + "id": 11011, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "initialize", + "nodeType": "MemberAccess", + "referencedDeclaration": 870, + "src": "3107:39:67", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", + "typeString": "function (address) external" + } + }, + "id": 11013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3107:50:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11014, + "nodeType": "ExpressionStatement", + "src": "3107:50:67" + }, + { + "expression": { + "id": 11019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11015, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10893, + "src": "3168:19:67", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 11017, + "indexExpression": { + "id": 11016, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10999, + "src": "3188:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3168:26:67", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 11018, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3197:4:67", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "3168:33:67", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11020, + "nodeType": "ExpressionStatement", + "src": "3168:33:67" + }, + { + "expression": { + "id": 11025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11021, + "name": "_recipientGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10897, + "src": "3211:15:67", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 11023, + "indexExpression": { + "id": 11022, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10980, + "src": "3227:9:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3211:26:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11024, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10999, + "src": "3240:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3211:34:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11026, + "nodeType": "ExpressionStatement", + "src": "3211:34:67" + }, + { + "eventCall": { + "arguments": [ + { + "id": 11028, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10999, + "src": "3284:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 11029, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10980, + "src": "3291:9:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11027, + "name": "PolygonRootGaugeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10903, + "src": "3260:23:67", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 11030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3260:41:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11031, + "nodeType": "EmitStatement", + "src": "3255:46:67" + }, + { + "expression": { + "id": 11032, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10999, + "src": "3319:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 10985, + "id": 11033, + "nodeType": "Return", + "src": "3312:12:67" + } + ] + }, + "documentation": { + "id": 10978, + "nodeType": "StructuredDocumentation", + "src": "2480:387:67", + "text": " @notice Deploys a new gauge which bridges all of its BAL allowance to a single recipient on Polygon.\n @dev Care must be taken to ensure that gauges deployed from this factory are\n suitable before they are added to the GaugeController.\n @param recipient The address to receive BAL minted from the gauge\n @return The address of the deployed gauge" + }, + "functionSelector": "9ed93318", + "id": 11035, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10982, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2916:8:67" + }, + "parameters": { + "id": 10981, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10980, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 11035, + "src": "2888:17:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10979, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2888:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2887:19:67" + }, + "returnParameters": { + "id": 10985, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10984, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11035, + "src": "2934:7:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10983, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2934:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2933:9:67" + }, + "scope": 11036, + "src": "2872:459:67", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 11037, + "src": "959:2374:67" + } + ], + "src": "688:2646:67" + }, + "id": 67 + }, + "contracts/test/MockGaugeController.sol": { + "ast": { + "absolutePath": "contracts/test/MockGaugeController.sol", + "exportedSymbols": { + "MockGaugeController": [ + 11202 + ] + }, + "id": 11203, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11038, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:68" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol", + "id": 11039, + "nodeType": "ImportDirective", + "scope": 11203, + "sourceUnit": 721, + "src": "713:86:68", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 11040, + "name": "IGaugeController", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 720, + "src": "1011:16:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGaugeController_$720", + "typeString": "contract IGaugeController" + } + }, + "id": 11041, + "nodeType": "InheritanceSpecifier", + "src": "1011:16:68" + } + ], + "contractDependencies": [ + 720 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 11202, + "linearizedBaseContracts": [ + 11202, + 720 + ], + "name": "MockGaugeController", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 11043, + "mutability": "mutable", + "name": "_numGaugeTypes", + "nodeType": "VariableDeclaration", + "scope": 11202, + "src": "1034:29:68", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 11042, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1034:6:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 11047, + "mutability": "mutable", + "name": "_validGauge", + "nodeType": "VariableDeclaration", + "scope": 11202, + "src": "1069:44:68", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 11046, + "keyType": { + "id": 11044, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1077:7:68", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1069:24:68", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 11045, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1088:4:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 11051, + "mutability": "mutable", + "name": "_gaugeType", + "nodeType": "VariableDeclaration", + "scope": 11202, + "src": "1119:45:68", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_int128_$", + "typeString": "mapping(address => int128)" + }, + "typeName": { + "id": 11050, + "keyType": { + "id": 11048, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1127:7:68", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1119:26:68", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_int128_$", + "typeString": "mapping(address => int128)" + }, + "valueType": { + "id": 11049, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1138:6:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + } + }, + "visibility": "private" + }, + { + "baseFunctions": [ + 719 + ], + "constant": false, + "functionSelector": "f851a440", + "id": 11054, + "mutability": "mutable", + "name": "admin", + "nodeType": "VariableDeclaration", + "overrides": { + "id": 11053, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1197:8:68" + }, + "scope": 11202, + "src": "1171:40:68", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 11052, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1171:18:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "public" + }, + { + "baseFunctions": [ + 676 + ], + "constant": false, + "functionSelector": "dfe05031", + "id": 11057, + "mutability": "mutable", + "name": "voting_escrow", + "nodeType": "VariableDeclaration", + "overrides": { + "id": 11056, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1290:8:68" + }, + "scope": 11202, + "src": "1269:43:68", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + }, + "typeName": { + "id": 11055, + "name": "IVotingEscrow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1035, + "src": "1269:13:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "id": 11065, + "name": "NewGauge", + "nodeType": "EventDefinition", + "parameters": { + "id": 11064, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11059, + "indexed": false, + "mutability": "mutable", + "name": "addr", + "nodeType": "VariableDeclaration", + "scope": 11065, + "src": "1413:12:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11058, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1413:7:68", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11061, + "indexed": false, + "mutability": "mutable", + "name": "gauge_type", + "nodeType": "VariableDeclaration", + "scope": 11065, + "src": "1427:17:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 11060, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1427:6:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11063, + "indexed": false, + "mutability": "mutable", + "name": "weight", + "nodeType": "VariableDeclaration", + "scope": 11065, + "src": "1446:14:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11062, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1446:7:68", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1412:49:68" + }, + "src": "1398:64:68" + }, + { + "body": { + "id": 11080, + "nodeType": "Block", + "src": "1546:80:68", + "statements": [ + { + "expression": { + "id": 11074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11072, + "name": "voting_escrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11057, + "src": "1556:13:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11073, + "name": "votingEscrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11067, + "src": "1572:12:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "src": "1556:28:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "id": 11075, + "nodeType": "ExpressionStatement", + "src": "1556:28:68" + }, + { + "expression": { + "id": 11078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11076, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11054, + "src": "1594:5:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11077, + "name": "authorizerAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11069, + "src": "1602:17:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "src": "1594:25:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "id": 11079, + "nodeType": "ExpressionStatement", + "src": "1594:25:68" + } + ] + }, + "id": 11081, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11070, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11067, + "mutability": "mutable", + "name": "votingEscrow", + "nodeType": "VariableDeclaration", + "scope": 11081, + "src": "1480:26:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + }, + "typeName": { + "id": 11066, + "name": "IVotingEscrow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1035, + "src": "1480:13:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVotingEscrow_$1035", + "typeString": "contract IVotingEscrow" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11069, + "mutability": "mutable", + "name": "authorizerAdaptor", + "nodeType": "VariableDeclaration", + "scope": 11081, + "src": "1508:36:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + }, + "typeName": { + "id": 11068, + "name": "IAuthorizerAdaptor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 28, + "src": "1508:18:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizerAdaptor_$28", + "typeString": "contract IAuthorizerAdaptor" + } + }, + "visibility": "internal" + } + ], + "src": "1479:66:68" + }, + "returnParameters": { + "id": 11071, + "nodeType": "ParameterList", + "parameters": [], + "src": "1546:0:68" + }, + "scope": 11202, + "src": "1468:158:68", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 707 + ], + "body": { + "id": 11089, + "nodeType": "Block", + "src": "1697:38:68", + "statements": [ + { + "expression": { + "id": 11087, + "name": "_numGaugeTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11043, + "src": "1714:14:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "functionReturnParameters": 11086, + "id": 11088, + "nodeType": "Return", + "src": "1707:21:68" + } + ] + }, + "functionSelector": "9fba03a1", + "id": 11090, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "n_gauge_types", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11083, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1671:8:68" + }, + "parameters": { + "id": 11082, + "nodeType": "ParameterList", + "parameters": [], + "src": "1654:2:68" + }, + "returnParameters": { + "id": 11086, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11085, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11090, + "src": "1689:6:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 11084, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1689:6:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + } + ], + "src": "1688:8:68" + }, + "scope": 11202, + "src": "1632:103:68", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 714 + ], + "body": { + "id": 11109, + "nodeType": "Block", + "src": "1817:115:68", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 11099, + "name": "_validGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11047, + "src": "1835:11:68", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 11101, + "indexExpression": { + "id": 11100, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11092, + "src": "1847:5:68", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1835:18:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520646f65736e2774206578697374206f6e20636f6e74726f6c6c6572", + "id": 11102, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1855:35:68", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5f98f0056a2a2d36597d519e41a523d365a021c79810a9edf58e600e7fd69ca4", + "typeString": "literal_string \"Gauge doesn't exist on controller\"" + }, + "value": "Gauge doesn't exist on controller" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5f98f0056a2a2d36597d519e41a523d365a021c79810a9edf58e600e7fd69ca4", + "typeString": "literal_string \"Gauge doesn't exist on controller\"" + } + ], + "id": 11098, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1827:7:68", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11103, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1827:64:68", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11104, + "nodeType": "ExpressionStatement", + "src": "1827:64:68" + }, + { + "expression": { + "baseExpression": { + "id": 11105, + "name": "_gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11051, + "src": "1908:10:68", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_int128_$", + "typeString": "mapping(address => int128)" + } + }, + "id": 11107, + "indexExpression": { + "id": 11106, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11092, + "src": "1919:5:68", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1908:17:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "functionReturnParameters": 11097, + "id": 11108, + "nodeType": "Return", + "src": "1901:24:68" + } + ] + }, + "functionSelector": "3f9095b7", + "id": 11110, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "gauge_types", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11094, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1791:8:68" + }, + "parameters": { + "id": 11093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11092, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 11110, + "src": "1762:13:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11091, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1762:7:68", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1761:15:68" + }, + "returnParameters": { + "id": 11097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11096, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11110, + "src": "1809:6:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 11095, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1809:6:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + } + ], + "src": "1808:8:68" + }, + "scope": 11202, + "src": "1741:191:68", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 702 + ], + "body": { + "id": 11149, + "nodeType": "Block", + "src": "2008:247:68", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "2026:19:68", + "subExpression": { + "baseExpression": { + "id": 11119, + "name": "_validGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11047, + "src": "2027:11:68", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 11121, + "indexExpression": { + "id": 11120, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11112, + "src": "2039:5:68", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2027:18:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520616c726561647920657869737473206f6e20636f6e74726f6c6c6572", + "id": 11123, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2047:36:68", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5c13c9fbfc091c81e4c335ae6e8019c9f881cfa5f4d6c852d65a3b51304c1acc", + "typeString": "literal_string \"Gauge already exists on controller\"" + }, + "value": "Gauge already exists on controller" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5c13c9fbfc091c81e4c335ae6e8019c9f881cfa5f4d6c852d65a3b51304c1acc", + "typeString": "literal_string \"Gauge already exists on controller\"" + } + ], + "id": 11118, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2018:7:68", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2018:66:68", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11125, + "nodeType": "ExpressionStatement", + "src": "2018:66:68" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 11133, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "id": 11129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11127, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11114, + "src": "2102:9:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 11128, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2115:1:68", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2102:14:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "id": 11132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11130, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11114, + "src": "2120:9:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 11131, + "name": "_numGaugeTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11043, + "src": "2132:14:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "src": "2120:26:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2102:44:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "496e76616c69642067617567652074797065", + "id": 11134, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2148:20:68", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7caf3c99505b1adcab00d79de51bcb4a4a77a851c4653aa92fd723940fb541bd", + "typeString": "literal_string \"Invalid gauge type\"" + }, + "value": "Invalid gauge type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7caf3c99505b1adcab00d79de51bcb4a4a77a851c4653aa92fd723940fb541bd", + "typeString": "literal_string \"Invalid gauge type\"" + } + ], + "id": 11126, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2094:7:68", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11135, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2094:75:68", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11136, + "nodeType": "ExpressionStatement", + "src": "2094:75:68" + }, + { + "expression": { + "id": 11141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11137, + "name": "_validGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11047, + "src": "2179:11:68", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 11139, + "indexExpression": { + "id": 11138, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11112, + "src": "2191:5:68", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2179:18:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 11140, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2200:4:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2179:25:68", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11142, + "nodeType": "ExpressionStatement", + "src": "2179:25:68" + }, + { + "eventCall": { + "arguments": [ + { + "id": 11144, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11112, + "src": "2228:5:68", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 11145, + "name": "gaugeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11114, + "src": "2235:9:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + { + "hexValue": "30", + "id": 11146, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2246:1:68", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 11143, + "name": "NewGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11065, + "src": "2219:8:68", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int128_$_t_uint256_$returns$__$", + "typeString": "function (address,int128,uint256)" + } + }, + "id": 11147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2219:29:68", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11148, + "nodeType": "EmitStatement", + "src": "2214:34:68" + } + ] + }, + "functionSelector": "3a04f900", + "id": 11150, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add_gauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11116, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1999:8:68" + }, + "parameters": { + "id": 11115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11112, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 11150, + "src": "1957:13:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11111, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1957:7:68", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11114, + "mutability": "mutable", + "name": "gaugeType", + "nodeType": "VariableDeclaration", + "scope": 11150, + "src": "1972:16:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 11113, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "1972:6:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + } + ], + "src": "1956:33:68" + }, + "returnParameters": { + "id": 11117, + "nodeType": "ParameterList", + "parameters": [], + "src": "2008:0:68" + }, + "scope": 11202, + "src": "1938:317:68", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 688 + ], + "body": { + "id": 11162, + "nodeType": "Block", + "src": "2323:36:68", + "statements": [ + { + "expression": { + "id": 11160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11158, + "name": "_numGaugeTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11043, + "src": "2333:14:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 11159, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2351:1:68", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2333:19:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "id": 11161, + "nodeType": "ExpressionStatement", + "src": "2333:19:68" + } + ] + }, + "functionSelector": "92d0d232", + "id": 11163, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add_type", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11156, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2314:8:68" + }, + "parameters": { + "id": 11155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11152, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "2279:15:68", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11151, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2279:6:68", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11154, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "2296:7:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11153, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2296:7:68", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2278:26:68" + }, + "returnParameters": { + "id": 11157, + "nodeType": "ParameterList", + "parameters": [], + "src": "2323:0:68" + }, + "scope": 11202, + "src": "2261:98:68", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 681 + ], + "body": { + "id": 11173, + "nodeType": "Block", + "src": "2422:33:68", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "30", + "id": 11170, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2446: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": 11169, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1650, + "src": "2439:6:68", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1650_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 11171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2439:9:68", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "functionReturnParameters": 11168, + "id": 11172, + "nodeType": "Return", + "src": "2432:16:68" + } + ] + }, + "functionSelector": "fc0c546a", + "id": 11174, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "token", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11165, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2396:8:68" + }, + "parameters": { + "id": 11164, + "nodeType": "ParameterList", + "parameters": [], + "src": "2379:2:68" + }, + "returnParameters": { + "id": 11168, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11167, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11174, + "src": "2414:6:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 11166, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2414:6:68", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2413:8:68" + }, + "scope": 11202, + "src": "2365:90:68", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 662 + ], + "body": { + "id": 11180, + "nodeType": "Block", + "src": "2514:64:68", + "statements": [] + }, + "functionSelector": "615e5237", + "id": 11181, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "checkpoint_gauge", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11178, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2505:8:68" + }, + "parameters": { + "id": 11177, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11176, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11181, + "src": "2487:7:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11175, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2487:7:68", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2486:9:68" + }, + "returnParameters": { + "id": 11179, + "nodeType": "ParameterList", + "parameters": [], + "src": "2514:0:68" + }, + "scope": 11202, + "src": "2461:117:68", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 671 + ], + "body": { + "id": 11191, + "nodeType": "Block", + "src": "2674:64:68", + "statements": [] + }, + "functionSelector": "d3078c94", + "id": 11192, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "gauge_relative_weight", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11187, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2647:8:68" + }, + "parameters": { + "id": 11186, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11183, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11192, + "src": "2615:7:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11182, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2615:7:68", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11185, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11192, + "src": "2624:7:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11184, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2624:7:68", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2614:18:68" + }, + "returnParameters": { + "id": 11190, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11189, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11192, + "src": "2665:7:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11188, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2665:7:68", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2664:9:68" + }, + "scope": 11202, + "src": "2584:154:68", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 695 + ], + "body": { + "id": 11200, + "nodeType": "Block", + "src": "2807:64:68", + "statements": [] + }, + "functionSelector": "db1ca260", + "id": 11201, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "change_type_weight", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11198, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2798:8:68" + }, + "parameters": { + "id": 11197, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11194, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11201, + "src": "2772:6:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + }, + "typeName": { + "id": 11193, + "name": "int128", + "nodeType": "ElementaryTypeName", + "src": "2772:6:68", + "typeDescriptions": { + "typeIdentifier": "t_int128", + "typeString": "int128" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11196, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11201, + "src": "2780:7:68", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11195, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2780:7:68", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2771:17:68" + }, + "returnParameters": { + "id": 11199, + "nodeType": "ParameterList", + "parameters": [], + "src": "2807:0:68" + }, + "scope": 11202, + "src": "2744:127:68", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 11203, + "src": "979:1894:68" + } + ], + "src": "688:2186:68" + }, + "id": 68 + }, + "contracts/test/MockLiquidityGauge.sol": { + "ast": { + "absolutePath": "contracts/test/MockLiquidityGauge.sol", + "exportedSymbols": { + "MockLiquidityGauge": [ + 11218 + ] + }, + "id": 11219, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11204, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:69" + }, + { + "id": 11205, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:69" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 11218, + "linearizedBaseContracts": [ + 11218 + ], + "name": "MockLiquidityGauge", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "functionSelector": "82c63066", + "id": 11207, + "mutability": "mutable", + "name": "lp_token", + "nodeType": "VariableDeclaration", + "scope": 11218, + "src": "833:23:69", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "833:7:69", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "body": { + "id": 11216, + "nodeType": "Block", + "src": "889:32:69", + "statements": [ + { + "expression": { + "id": 11214, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11212, + "name": "lp_token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11207, + "src": "899:8:69", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11213, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11209, + "src": "910:4:69", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "899:15:69", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11215, + "nodeType": "ExpressionStatement", + "src": "899:15:69" + } + ] + }, + "id": 11217, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11209, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 11217, + "src": "875:12:69", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11208, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "875:7:69", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "874:14:69" + }, + "returnParameters": { + "id": 11211, + "nodeType": "ParameterList", + "parameters": [], + "src": "889:0:69" + }, + "scope": 11218, + "src": "863:58:69", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 11219, + "src": "747:176:69" + } + ], + "src": "688:236:69" + }, + "id": 69 + }, + "contracts/test/MockLiquidityGaugeFactory.sol": { + "ast": { + "absolutePath": "contracts/test/MockLiquidityGaugeFactory.sol", + "exportedSymbols": { + "MockLiquidityGaugeFactory": [ + 11322 + ] + }, + "id": 11323, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11220, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:70" + }, + { + "id": 11221, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:70" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol", + "id": 11222, + "nodeType": "ImportDirective", + "scope": 11323, + "sourceUnit": 769, + "src": "747:92:70", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 11223, + "nodeType": "ImportDirective", + "scope": 11323, + "sourceUnit": 2289, + "src": "840:65:70", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "id": 11224, + "nodeType": "ImportDirective", + "scope": 11323, + "sourceUnit": 2366, + "src": "907:79:70", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Clones.sol", + "id": 11225, + "nodeType": "ImportDirective", + "scope": 11323, + "sourceUnit": 3132, + "src": "987:76:70", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/test/MockLiquidityGauge.sol", + "file": "./MockLiquidityGauge.sol", + "id": 11226, + "nodeType": "ImportDirective", + "scope": 11323, + "sourceUnit": 11219, + "src": "1065:34:70", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 11227, + "name": "ILiquidityGaugeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 768, + "src": "1139:22:70", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGaugeFactory_$768", + "typeString": "contract ILiquidityGaugeFactory" + } + }, + "id": 11228, + "nodeType": "InheritanceSpecifier", + "src": "1139:22:70" + } + ], + "contractDependencies": [ + 768, + 11218 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 11322, + "linearizedBaseContracts": [ + 11322, + 768 + ], + "name": "MockLiquidityGaugeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 11232, + "mutability": "mutable", + "name": "_isGaugeFromFactory", + "nodeType": "VariableDeclaration", + "scope": 11322, + "src": "1168:52:70", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 11231, + "keyType": { + "id": 11229, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1176:7:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1168:24:70", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 11230, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1187:4:70", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 11236, + "mutability": "mutable", + "name": "_poolGauge", + "nodeType": "VariableDeclaration", + "scope": 11322, + "src": "1226:46:70", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "typeName": { + "id": 11235, + "keyType": { + "id": 11233, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1234:7:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1226:27:70", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + }, + "valueType": { + "id": 11234, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1245:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 11242, + "name": "GaugeCreated", + "nodeType": "EventDefinition", + "parameters": { + "id": 11241, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11238, + "indexed": true, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 11242, + "src": "1298:21:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11237, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1298:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11240, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 11242, + "src": "1321:20:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11239, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1321:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1297:45:70" + }, + "src": "1279:64:70" + }, + { + "body": { + "id": 11256, + "nodeType": "Block", + "src": "1510:57:70", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 11251, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11236, + "src": "1543:10:70", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 11253, + "indexExpression": { + "id": 11252, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11245, + "src": "1554:4:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1543:16:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11250, + "name": "ILiquidityGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 748, + "src": "1527:15:70", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILiquidityGauge_$748_$", + "typeString": "type(contract ILiquidityGauge)" + } + }, + "id": 11254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1527:33:70", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "functionReturnParameters": 11249, + "id": 11255, + "nodeType": "Return", + "src": "1520:40:70" + } + ] + }, + "documentation": { + "id": 11243, + "nodeType": "StructuredDocumentation", + "src": "1349:80:70", + "text": " @notice Returns the address of the gauge belonging to `pool`." + }, + "functionSelector": "a8ea6875", + "id": 11257, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPoolGauge", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11246, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11245, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 11257, + "src": "1456:12:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11244, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1456:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1455:14:70" + }, + "returnParameters": { + "id": 11249, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11248, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11257, + "src": "1493:15:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + }, + "typeName": { + "id": 11247, + "name": "ILiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 748, + "src": "1493:15:70", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILiquidityGauge_$748", + "typeString": "contract ILiquidityGauge" + } + }, + "visibility": "internal" + } + ], + "src": "1492:17:70" + }, + "scope": 11322, + "src": "1434:133:70", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 760 + ], + "body": { + "id": 11270, + "nodeType": "Block", + "src": "1738:50:70", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 11266, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11232, + "src": "1755:19:70", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 11268, + "indexExpression": { + "id": 11267, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11260, + "src": "1775:5:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1755:26:70", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11265, + "id": 11269, + "nodeType": "Return", + "src": "1748:33:70" + } + ] + }, + "documentation": { + "id": 11258, + "nodeType": "StructuredDocumentation", + "src": "1573:79:70", + "text": " @notice Returns true if `gauge` was created by this factory." + }, + "functionSelector": "ce3cc8bd", + "id": 11271, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isGaugeFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11262, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1714:8:70" + }, + "parameters": { + "id": 11261, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11260, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 11271, + "src": "1685:13:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11259, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1685:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1684:15:70" + }, + "returnParameters": { + "id": 11265, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11264, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11271, + "src": "1732:4:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11263, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1732:4:70", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1731:6:70" + }, + "scope": 11322, + "src": "1657:131:70", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 767 + ], + "body": { + "id": 11320, + "nodeType": "Block", + "src": "1860:285:70", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 11287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 11280, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11236, + "src": "1878:10:70", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 11282, + "indexExpression": { + "id": 11281, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11273, + "src": "1889:4:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1878:16:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 11285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1906:1:70", + "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": 11284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1898:7:70", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 11283, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1898:7:70", + "typeDescriptions": {} + } + }, + "id": 11286, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1898:10:70", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "1878:30:70", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "476175676520616c726561647920657869737473", + "id": 11288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1910:22:70", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + }, + "value": "Gauge already exists" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0ff732be99ebae4ab76694efc15798dda1f02cffde7b6a10393e397e60f38cb6", + "typeString": "literal_string \"Gauge already exists\"" + } + ], + "id": 11279, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1870:7:70", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11289, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1870:63:70", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11290, + "nodeType": "ExpressionStatement", + "src": "1870:63:70" + }, + { + "assignments": [ + 11292 + ], + "declarations": [ + { + "constant": false, + "id": 11292, + "mutability": "mutable", + "name": "gauge", + "nodeType": "VariableDeclaration", + "scope": 11320, + "src": "1944:13:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11291, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1944:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 11300, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 11297, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11273, + "src": "1991:4:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1968:22:70", + "typeDescriptions": { + "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_MockLiquidityGauge_$11218_$", + "typeString": "function (address) returns (contract MockLiquidityGauge)" + }, + "typeName": { + "id": 11295, + "name": "MockLiquidityGauge", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 11218, + "src": "1972:18:70", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockLiquidityGauge_$11218", + "typeString": "contract MockLiquidityGauge" + } + } + }, + "id": 11298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1968:28:70", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockLiquidityGauge_$11218", + "typeString": "contract MockLiquidityGauge" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockLiquidityGauge_$11218", + "typeString": "contract MockLiquidityGauge" + } + ], + "id": 11294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1960:7:70", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 11293, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1960:7:70", + "typeDescriptions": {} + } + }, + "id": 11299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1960:37:70", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1944:53:70" + }, + { + "expression": { + "id": 11305, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11301, + "name": "_isGaugeFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11232, + "src": "2008:19:70", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 11303, + "indexExpression": { + "id": 11302, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11292, + "src": "2028:5:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2008:26:70", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 11304, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2037:4:70", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2008:33:70", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11306, + "nodeType": "ExpressionStatement", + "src": "2008:33:70" + }, + { + "expression": { + "id": 11311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11307, + "name": "_poolGauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11236, + "src": "2051:10:70", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_address_$", + "typeString": "mapping(address => address)" + } + }, + "id": 11309, + "indexExpression": { + "id": 11308, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11273, + "src": "2062:4:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2051:16:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11310, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11292, + "src": "2070:5:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2051:24:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11312, + "nodeType": "ExpressionStatement", + "src": "2051:24:70" + }, + { + "eventCall": { + "arguments": [ + { + "id": 11314, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11292, + "src": "2103:5:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 11315, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11273, + "src": "2110:4:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11313, + "name": "GaugeCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11242, + "src": "2090:12:70", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 11316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2090:25:70", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11317, + "nodeType": "EmitStatement", + "src": "2085:30:70" + }, + { + "expression": { + "id": 11318, + "name": "gauge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11292, + "src": "2133:5:70", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 11278, + "id": 11319, + "nodeType": "Return", + "src": "2126:12:70" + } + ] + }, + "functionSelector": "9ed93318", + "id": 11321, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11275, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1833:8:70" + }, + "parameters": { + "id": 11274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11273, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 11321, + "src": "1810:12:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11272, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1810:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1809:14:70" + }, + "returnParameters": { + "id": 11278, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11277, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11321, + "src": "1851:7:70", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11276, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1851:7:70", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1850:9:70" + }, + "scope": 11322, + "src": "1794:351:70", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 11323, + "src": "1101:1046:70" + } + ], + "src": "688:1460:70" + }, + "id": 70 + }, + "contracts/test/MockRewardTokenDistributor.sol": { + "ast": { + "absolutePath": "contracts/test/MockRewardTokenDistributor.sol", + "exportedSymbols": { + "MockRewardTokenDistributor": [ + 11462 + ] + }, + "id": 11463, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11324, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:71" + }, + { + "id": 11325, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:71" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 11326, + "nodeType": "ImportDirective", + "scope": 11463, + "sourceUnit": 1651, + "src": "747:87:71", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol", + "id": 11327, + "nodeType": "ImportDirective", + "scope": 11463, + "sourceUnit": 827, + "src": "835:93:71", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 11329, + "name": "IRewardTokenDistributor", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 826, + "src": "1160:23:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewardTokenDistributor_$826", + "typeString": "contract IRewardTokenDistributor" + } + }, + "id": 11330, + "nodeType": "InheritanceSpecifier", + "src": "1160:23:71" + } + ], + "contractDependencies": [ + 826 + ], + "contractKind": "contract", + "documentation": { + "id": 11328, + "nodeType": "StructuredDocumentation", + "src": "1008:112:71", + "text": " @dev This contract is designed to mock LiquidityGaugeV5's interface for distributing external tokens." + }, + "fullyImplemented": true, + "id": 11462, + "linearizedBaseContracts": [ + 11462, + 826 + ], + "name": "MockRewardTokenDistributor", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 11332, + "mutability": "mutable", + "name": "_rewardCount", + "nodeType": "VariableDeclaration", + "scope": 11462, + "src": "1190:28:71", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11331, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1190:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 11336, + "mutability": "mutable", + "name": "_rewardTokens", + "nodeType": "VariableDeclaration", + "scope": 11462, + "src": "1224:31:71", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_storage", + "typeString": "contract IERC20[8]" + }, + "typeName": { + "baseType": { + "id": 11333, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1224:6:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 11335, + "length": { + "hexValue": "38", + "id": 11334, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1231:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "nodeType": "ArrayTypeName", + "src": "1224:9:71", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_storage_ptr", + "typeString": "contract IERC20[8]" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 11340, + "mutability": "mutable", + "name": "_rewardData", + "nodeType": "VariableDeclaration", + "scope": 11462, + "src": "1261:45:71", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_Reward_$785_storage_$", + "typeString": "mapping(contract IERC20 => struct IRewardTokenDistributor.Reward)" + }, + "typeName": { + "id": 11339, + "keyType": { + "id": 11337, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1269:6:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Mapping", + "src": "1261:25:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_Reward_$785_storage_$", + "typeString": "mapping(contract IERC20 => struct IRewardTokenDistributor.Reward)" + }, + "valueType": { + "id": 11338, + "name": "Reward", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 785, + "src": "1279:6:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage_ptr", + "typeString": "struct IRewardTokenDistributor.Reward" + } + } + }, + "visibility": "private" + }, + { + "baseFunctions": [ + 792 + ], + "body": { + "id": 11352, + "nodeType": "Block", + "src": "1391:44:71", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 11348, + "name": "_rewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11336, + "src": "1408:13:71", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_storage", + "typeString": "contract IERC20[8] storage ref" + } + }, + "id": 11350, + "indexExpression": { + "id": 11349, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11342, + "src": "1422:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1408:20:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "functionReturnParameters": 11347, + "id": 11351, + "nodeType": "Return", + "src": "1401:27:71" + } + ] + }, + "functionSelector": "54c49fe9", + "id": 11353, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "reward_tokens", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11344, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1365:8:71" + }, + "parameters": { + "id": 11343, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11342, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 11353, + "src": "1336:13:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11341, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1336:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1335:15:71" + }, + "returnParameters": { + "id": 11347, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11346, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11353, + "src": "1383:6:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 11345, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1383:6:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1382:8:71" + }, + "scope": 11462, + "src": "1313:122:71", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 799 + ], + "body": { + "id": 11365, + "nodeType": "Block", + "src": "1523:42:71", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 11361, + "name": "_rewardData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11340, + "src": "1540:11:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_Reward_$785_storage_$", + "typeString": "mapping(contract IERC20 => struct IRewardTokenDistributor.Reward storage ref)" + } + }, + "id": 11363, + "indexExpression": { + "id": 11362, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11355, + "src": "1552:5:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1540:18:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage", + "typeString": "struct IRewardTokenDistributor.Reward storage ref" + } + }, + "functionReturnParameters": 11360, + "id": 11364, + "nodeType": "Return", + "src": "1533:25:71" + } + ] + }, + "functionSelector": "48e9c65e", + "id": 11366, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "reward_data", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11357, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1490:8:71" + }, + "parameters": { + "id": 11356, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11355, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 11366, + "src": "1462:12:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 11354, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1462:6:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1461:14:71" + }, + "returnParameters": { + "id": 11360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11359, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11366, + "src": "1508:13:71", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_memory_ptr", + "typeString": "struct IRewardTokenDistributor.Reward" + }, + "typeName": { + "id": 11358, + "name": "Reward", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 785, + "src": "1508:6:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage_ptr", + "typeString": "struct IRewardTokenDistributor.Reward" + } + }, + "visibility": "internal" + } + ], + "src": "1507:15:71" + }, + "scope": 11462, + "src": "1441:124:71", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 811 + ], + "body": { + "id": 11405, + "nodeType": "Block", + "src": "1650:390:71", + "statements": [ + { + "expression": { + "id": 11378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11374, + "name": "_rewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11336, + "src": "1660:13:71", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1650_$8_storage", + "typeString": "contract IERC20[8] storage ref" + } + }, + "id": 11376, + "indexExpression": { + "id": 11375, + "name": "_rewardCount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11332, + "src": "1674:12:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1660:27:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11377, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11368, + "src": "1690:11:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "src": "1660:41:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 11379, + "nodeType": "ExpressionStatement", + "src": "1660:41:71" + }, + { + "expression": { + "id": 11392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11380, + "name": "_rewardData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11340, + "src": "1711:11:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_Reward_$785_storage_$", + "typeString": "mapping(contract IERC20 => struct IRewardTokenDistributor.Reward storage ref)" + } + }, + "id": 11382, + "indexExpression": { + "id": 11381, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11368, + "src": "1723:11:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1711:24:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage", + "typeString": "struct IRewardTokenDistributor.Reward storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 11384, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11368, + "src": "1766:11:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + { + "id": 11385, + "name": "distributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11370, + "src": "1804:11:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "30", + "id": 11386, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1844:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 11387, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1865:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "expression": { + "id": 11388, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "1893:5:71", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 11389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "1893:15:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "30", + "id": 11390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1932:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + { + "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_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 11383, + "name": "Reward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 785, + "src": "1738:6:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Reward_$785_storage_ptr_$", + "typeString": "type(struct IRewardTokenDistributor.Reward storage pointer)" + } + }, + "id": 11391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "token", + "distributor", + "period_finish", + "rate", + "last_update", + "integral" + ], + "nodeType": "FunctionCall", + "src": "1738:206:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_memory_ptr", + "typeString": "struct IRewardTokenDistributor.Reward memory" + } + }, + "src": "1711:233:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage", + "typeString": "struct IRewardTokenDistributor.Reward storage ref" + } + }, + "id": 11393, + "nodeType": "ExpressionStatement", + "src": "1711:233:71" + }, + { + "expression": { + "id": 11396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11394, + "name": "_rewardCount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11332, + "src": "1955:12:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 11395, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1971:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1955:17:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11397, + "nodeType": "ExpressionStatement", + "src": "1955:17:71" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11399, + "name": "_rewardCount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11332, + "src": "1990:12:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "38", + "id": 11400, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2005:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "1990:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "546f6f206d616e792072657761726420746f6b656e73", + "id": 11402, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2008:24:71", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_83203493ea391d6bbbaa1b906bb34cd117892c68ada4ec61cd9ab95294c7a64f", + "typeString": "literal_string \"Too many reward tokens\"" + }, + "value": "Too many reward tokens" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_83203493ea391d6bbbaa1b906bb34cd117892c68ada4ec61cd9ab95294c7a64f", + "typeString": "literal_string \"Too many reward tokens\"" + } + ], + "id": 11398, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1982:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1982:51:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11404, + "nodeType": "ExpressionStatement", + "src": "1982:51:71" + } + ] + }, + "functionSelector": "e8de0d4d", + "id": 11406, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add_reward", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11372, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1641:8:71" + }, + "parameters": { + "id": 11371, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11368, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 11406, + "src": "1591:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 11367, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "1591:6:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11370, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 11406, + "src": "1611:19:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11369, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1611:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1590:41:71" + }, + "returnParameters": { + "id": 11373, + "nodeType": "ParameterList", + "parameters": [], + "src": "1650:0:71" + }, + "scope": 11462, + "src": "1571:469:71", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 818 + ], + "body": { + "id": 11421, + "nodeType": "Block", + "src": "2137:67:71", + "statements": [ + { + "expression": { + "id": 11419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 11414, + "name": "_rewardData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11340, + "src": "2147:11:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_Reward_$785_storage_$", + "typeString": "mapping(contract IERC20 => struct IRewardTokenDistributor.Reward storage ref)" + } + }, + "id": 11416, + "indexExpression": { + "id": 11415, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11408, + "src": "2159:11:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2147:24:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage", + "typeString": "struct IRewardTokenDistributor.Reward storage ref" + } + }, + "id": 11417, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "distributor", + "nodeType": "MemberAccess", + "referencedDeclaration": 776, + "src": "2147:36:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11418, + "name": "distributor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11410, + "src": "2186:11:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2147:50:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11420, + "nodeType": "ExpressionStatement", + "src": "2147:50:71" + } + ] + }, + "functionSelector": "058a3a24", + "id": 11422, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "set_reward_distributor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11412, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2128:8:71" + }, + "parameters": { + "id": 11411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11408, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 11422, + "src": "2078:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 11407, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2078:6:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11410, + "mutability": "mutable", + "name": "distributor", + "nodeType": "VariableDeclaration", + "scope": 11422, + "src": "2098:19:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11409, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2098:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2077:41:71" + }, + "returnParameters": { + "id": 11413, + "nodeType": "ParameterList", + "parameters": [], + "src": "2137:0:71" + }, + "scope": 11462, + "src": "2046:158:71", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 825 + ], + "body": { + "id": 11453, + "nodeType": "Block", + "src": "2294:240:71", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 11437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "id": 11431, + "name": "_rewardData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11340, + "src": "2312:11:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$1650_$_t_struct$_Reward_$785_storage_$", + "typeString": "mapping(contract IERC20 => struct IRewardTokenDistributor.Reward storage ref)" + } + }, + "id": 11433, + "indexExpression": { + "id": 11432, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11424, + "src": "2324:11:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2312:24:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Reward_$785_storage", + "typeString": "struct IRewardTokenDistributor.Reward storage ref" + } + }, + "id": 11434, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "distributor", + "nodeType": "MemberAccess", + "referencedDeclaration": 776, + "src": "2312:36:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11435, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2352:3:71", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11436, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2352:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "2312:50:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4f6e6c792063616c6c61626c6520627920726577617264206469737472696275746f72", + "id": 11438, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2364:37:71", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8fe65f43f4fb2e61b1698a7bc8a9236fae68b8ef299ce00a6e0d31324a0fdbe1", + "typeString": "literal_string \"Only callable by reward distributor\"" + }, + "value": "Only callable by reward distributor" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8fe65f43f4fb2e61b1698a7bc8a9236fae68b8ef299ce00a6e0d31324a0fdbe1", + "typeString": "literal_string \"Only callable by reward distributor\"" + } + ], + "id": 11430, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2304:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2304:98:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11440, + "nodeType": "ExpressionStatement", + "src": "2304:98:71" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 11444, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2437:3:71", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2437:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 11448, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2457:4:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockRewardTokenDistributor_$11462", + "typeString": "contract MockRewardTokenDistributor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockRewardTokenDistributor_$11462", + "typeString": "contract MockRewardTokenDistributor" + } + ], + "id": 11447, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2449:7:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 11446, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2449:7:71", + "typeDescriptions": {} + } + }, + "id": 11449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2449:13:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 11450, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11426, + "src": "2464:6:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11441, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11424, + "src": "2412:11:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "id": 11443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1631, + "src": "2412:24:71", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 11451, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2412:59:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11452, + "nodeType": "ExpressionStatement", + "src": "2412:59:71" + } + ] + }, + "functionSelector": "93f7aa67", + "id": 11454, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit_reward_token", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11428, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2285:8:71" + }, + "parameters": { + "id": 11427, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11424, + "mutability": "mutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "scope": 11454, + "src": "2240:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 11423, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1650, + "src": "2240:6:71", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1650", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11426, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 11454, + "src": "2260:14:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11425, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2260:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2239:36:71" + }, + "returnParameters": { + "id": 11429, + "nodeType": "ParameterList", + "parameters": [], + "src": "2294:0:71" + }, + "scope": 11462, + "src": "2210:324:71", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 804 + ], + "body": { + "id": 11460, + "nodeType": "Block", + "src": "2595:64:71", + "statements": [] + }, + "functionSelector": "84e9bd7e", + "id": 11461, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "claim_rewards", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11458, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2586:8:71" + }, + "parameters": { + "id": 11457, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11456, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 11461, + "src": "2563:12:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11455, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2563:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2562:14:71" + }, + "returnParameters": { + "id": 11459, + "nodeType": "ParameterList", + "parameters": [], + "src": "2595:0:71" + }, + "scope": 11462, + "src": "2540:119:71", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 11463, + "src": "1121:1540:71" + } + ], + "src": "688:1974:71" + }, + "id": 71 + }, + "contracts/test/TestAccessControl.sol": { + "ast": { + "absolutePath": "contracts/test/TestAccessControl.sol", + "exportedSymbols": { + "TestAccessControl": [ + 11742 + ] + }, + "id": 11743, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11464, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:72" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EnumerableSet.sol", + "id": 11465, + "nodeType": "ImportDirective", + "scope": 11743, + "sourceUnit": 4366, + "src": "58:83:72", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/Address.sol", + "id": 11466, + "nodeType": "ImportDirective", + "scope": 11743, + "sourceUnit": 3052, + "src": "142:77:72", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 11467, + "nodeType": "StructuredDocumentation", + "src": "336:1276:72", + "text": " @dev Contract module that allows children to implement role-based access\n control mechanisms.\n Roles are referred to by their `bytes32` identifier. These should be exposed\n in the external API and be unique. The best way to achieve this is by\n using `public constant` hash digests:\n ```\n bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n ```\n Roles can be used to represent a set of permissions. To restrict access to a\n function call, use {hasRole}:\n ```\n function foo() public {\n require(hasRole(MY_ROLE, msg.sender));\n ...\n }\n ```\n Roles can be granted and revoked dynamically via the {grantRole} and\n {revokeRole} functions. Each role has an associated admin role, and only\n accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n that only accounts with this role will be able to grant or revoke other\n roles. More complex role relationships can be created by using\n {_setRoleAdmin}.\n WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n grant and revoke this role. Extra precautions should be taken to secure\n accounts that have been granted it." + }, + "fullyImplemented": true, + "id": 11742, + "linearizedBaseContracts": [ + 11742 + ], + "name": "TestAccessControl", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 11470, + "libraryName": { + "id": 11468, + "name": "EnumerableSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4365, + "src": "1661:13:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EnumerableSet_$4365", + "typeString": "library EnumerableSet" + } + }, + "nodeType": "UsingForDirective", + "src": "1655:49:72", + "typeName": { + "id": 11469, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "1679:24:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + } + }, + { + "id": 11473, + "libraryName": { + "id": 11471, + "name": "Address", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3051, + "src": "1715:7:72", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Address_$3051", + "typeString": "library Address" + } + }, + "nodeType": "UsingForDirective", + "src": "1709:26:72", + "typeName": { + "id": 11472, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1727:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + { + "canonicalName": "TestAccessControl.RoleData", + "id": 11478, + "members": [ + { + "constant": false, + "id": 11475, + "mutability": "mutable", + "name": "members", + "nodeType": "VariableDeclaration", + "scope": 11478, + "src": "1767:32:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + }, + "typeName": { + "id": 11474, + "name": "EnumerableSet.AddressSet", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3924, + "src": "1767:24:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage_ptr", + "typeString": "struct EnumerableSet.AddressSet" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11477, + "mutability": "mutable", + "name": "adminRole", + "nodeType": "VariableDeclaration", + "scope": 11478, + "src": "1809:17:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11476, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1809:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "name": "RoleData", + "nodeType": "StructDefinition", + "scope": 11742, + "src": "1741:92:72", + "visibility": "public" + }, + { + "constant": false, + "id": 11482, + "mutability": "mutable", + "name": "_roles", + "nodeType": "VariableDeclaration", + "scope": 11742, + "src": "1839:43:72", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData)" + }, + "typeName": { + "id": 11481, + "keyType": { + "id": 11479, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1847:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1839:28:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData)" + }, + "valueType": { + "id": 11480, + "name": "RoleData", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 11478, + "src": "1858:8:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage_ptr", + "typeString": "struct TestAccessControl.RoleData" + } + } + }, + "visibility": "private" + }, + { + "constant": true, + "functionSelector": "a217fddf", + "id": 11485, + "mutability": "constant", + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "VariableDeclaration", + "scope": 11742, + "src": "1889:49:72", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11483, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1889:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "30783030", + "id": 11484, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1934:4:72", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x00" + }, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 11486, + "nodeType": "StructuredDocumentation", + "src": "1945:292:72", + "text": " @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n {RoleAdminChanged} not being emitted signaling this.\n _Available since v3.1._" + }, + "id": 11494, + "name": "RoleAdminChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 11493, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11488, + "indexed": true, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11494, + "src": "2265:20:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11487, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2265:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11490, + "indexed": true, + "mutability": "mutable", + "name": "previousAdminRole", + "nodeType": "VariableDeclaration", + "scope": 11494, + "src": "2287:33:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11489, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2287:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11492, + "indexed": true, + "mutability": "mutable", + "name": "newAdminRole", + "nodeType": "VariableDeclaration", + "scope": 11494, + "src": "2322:28:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11491, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2322:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2264:87:72" + }, + "src": "2242:110:72" + }, + { + "anonymous": false, + "documentation": { + "id": 11495, + "nodeType": "StructuredDocumentation", + "src": "2358:198:72", + "text": " @dev Emitted when `account` is granted `role`.\n `sender` is the account that originated the contract call, an admin role\n bearer except when using {_setupRole}." + }, + "id": 11503, + "name": "RoleGranted", + "nodeType": "EventDefinition", + "parameters": { + "id": 11502, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11497, + "indexed": true, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11503, + "src": "2579:20:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11496, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2579:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11499, + "indexed": true, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11503, + "src": "2601:23:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11498, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2601:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11501, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 11503, + "src": "2626:22:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11500, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2626:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2578:71:72" + }, + "src": "2561:89:72" + }, + { + "anonymous": false, + "documentation": { + "id": 11504, + "nodeType": "StructuredDocumentation", + "src": "2656:275:72", + "text": " @dev Emitted when `account` is revoked `role`.\n `sender` is the account that originated the contract call:\n - if using `revokeRole`, it is the admin role bearer\n - if using `renounceRole`, it is the role bearer (i.e. `account`)" + }, + "id": 11512, + "name": "RoleRevoked", + "nodeType": "EventDefinition", + "parameters": { + "id": 11511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11506, + "indexed": true, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11512, + "src": "2954:20:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11505, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2954:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11508, + "indexed": true, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11512, + "src": "2976:23:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11507, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2976:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11510, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 11512, + "src": "3001:22:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11509, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3001:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2953:71:72" + }, + "src": "2936:89:72" + }, + { + "body": { + "id": 11530, + "nodeType": "Block", + "src": "3187:62:72", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11527, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11517, + "src": "3234:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "expression": { + "baseExpression": { + "id": 11522, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "3204:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11524, + "indexExpression": { + "id": 11523, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11515, + "src": "3211:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3204:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11525, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "members", + "nodeType": "MemberAccess", + "referencedDeclaration": 11475, + "src": "3204:20:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 11526, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contains", + "nodeType": "MemberAccess", + "referencedDeclaration": 4068, + "src": "3204:29:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)" + } + }, + "id": 11528, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3204:38:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11521, + "id": 11529, + "nodeType": "Return", + "src": "3197:45:72" + } + ] + }, + "documentation": { + "id": 11513, + "nodeType": "StructuredDocumentation", + "src": "3031:76:72", + "text": " @dev Returns `true` if `account` has been granted `role`." + }, + "functionSelector": "91d14854", + "id": 11531, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "hasRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11515, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11531, + "src": "3129:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11514, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3129:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11517, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11531, + "src": "3143:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11516, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3143:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3128:31:72" + }, + "returnParameters": { + "id": 11521, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11520, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11531, + "src": "3181:4:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11519, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3181:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3180:6:72" + }, + "scope": 11742, + "src": "3112:137:72", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 11546, + "nodeType": "Block", + "src": "3489:53:72", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "baseExpression": { + "id": 11539, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "3506:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11541, + "indexExpression": { + "id": 11540, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11534, + "src": "3513:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3506:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11542, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "members", + "nodeType": "MemberAccess", + "referencedDeclaration": 11475, + "src": "3506:20:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 11543, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": 4081, + "src": "3506:27:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)" + } + }, + "id": 11544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3506:29:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 11538, + "id": 11545, + "nodeType": "Return", + "src": "3499:36:72" + } + ] + }, + "documentation": { + "id": 11532, + "nodeType": "StructuredDocumentation", + "src": "3255:157:72", + "text": " @dev Returns the number of accounts that have `role`. Can be used\n together with {getRoleMember} to enumerate all bearers of a role." + }, + "functionSelector": "ca15c873", + "id": 11547, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRoleMemberCount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11535, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11534, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11547, + "src": "3445:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11533, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3445:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3444:14:72" + }, + "returnParameters": { + "id": 11538, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11537, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11547, + "src": "3480:7:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11536, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3480:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3479:9:72" + }, + "scope": 11742, + "src": "3417:125:72", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 11565, + "nodeType": "Block", + "src": "4286:54:72", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11562, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11552, + "src": "4327:5:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "expression": { + "baseExpression": { + "id": 11557, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "4303:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11559, + "indexExpression": { + "id": 11558, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11550, + "src": "4310:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4303:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11560, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "members", + "nodeType": "MemberAccess", + "referencedDeclaration": 11475, + "src": "4303:20:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 11561, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "at", + "nodeType": "MemberAccess", + "referencedDeclaration": 4107, + "src": "4303:23:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$3924_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)" + } + }, + "id": 11563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4303:30:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 11556, + "id": 11564, + "nodeType": "Return", + "src": "4296:37:72" + } + ] + }, + "documentation": { + "id": 11548, + "nodeType": "StructuredDocumentation", + "src": "3587:574:72", + "text": " @dev Returns one of the accounts that have `role`. `index` must be a\n value between 0 and {getRoleMemberCount}, non-inclusive.\n Role bearers are not sorted in any particular way, and their ordering may\n change at any point.\n WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\n you perform all queries on the same block. See the following\n https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\n for more information." + }, + "functionSelector": "9010d07c", + "id": 11566, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRoleMember", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11553, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11550, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11566, + "src": "4227:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11549, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4227:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11552, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 11566, + "src": "4241:13:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11551, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4241:7:72", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4226:29:72" + }, + "returnParameters": { + "id": 11556, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11555, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11566, + "src": "4277:7:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11554, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4277:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4276:9:72" + }, + "scope": 11742, + "src": "4204:136:72", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 11579, + "nodeType": "Block", + "src": "4587:46:72", + "statements": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 11574, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "4604:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11576, + "indexExpression": { + "id": 11575, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11569, + "src": "4611:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4604:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11577, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "adminRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 11477, + "src": "4604:22:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 11573, + "id": 11578, + "nodeType": "Return", + "src": "4597:29:72" + } + ] + }, + "documentation": { + "id": 11567, + "nodeType": "StructuredDocumentation", + "src": "4346:170:72", + "text": " @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {_setRoleAdmin}." + }, + "functionSelector": "248a9ca3", + "id": 11580, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRoleAdmin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11569, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11580, + "src": "4543:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11568, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4543:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4542:14:72" + }, + "returnParameters": { + "id": 11573, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11572, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11580, + "src": "4578:7:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11571, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4578:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4577:9:72" + }, + "scope": 11742, + "src": "4521:112:72", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 11605, + "nodeType": "Block", + "src": "4948:156:72", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 11590, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "4974:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11592, + "indexExpression": { + "id": 11591, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11583, + "src": "4981:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4974:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11593, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "adminRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 11477, + "src": "4974:22:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 11594, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4998:3:72", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4998:10:72", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 11589, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11531, + "src": "4966:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 11596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4966:43:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74", + "id": 11597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5011:49:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811", + "typeString": "literal_string \"AccessControl: sender must be an admin to grant\"" + }, + "value": "AccessControl: sender must be an admin to grant" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811", + "typeString": "literal_string \"AccessControl: sender must be an admin to grant\"" + } + ], + "id": 11588, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4958:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4958:103:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11599, + "nodeType": "ExpressionStatement", + "src": "4958:103:72" + }, + { + "expression": { + "arguments": [ + { + "id": 11601, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11583, + "src": "5083:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11602, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11585, + "src": "5089:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11600, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11717, + "src": "5072:10:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 11603, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5072:25:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11604, + "nodeType": "ExpressionStatement", + "src": "5072:25:72" + } + ] + }, + "documentation": { + "id": 11581, + "nodeType": "StructuredDocumentation", + "src": "4639:239:72", + "text": " @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role." + }, + "functionSelector": "2f2ff15d", + "id": 11606, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "grantRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11586, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11583, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11606, + "src": "4902:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11582, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4902:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11585, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11606, + "src": "4916:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11584, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4916:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4901:31:72" + }, + "returnParameters": { + "id": 11587, + "nodeType": "ParameterList", + "parameters": [], + "src": "4948:0:72" + }, + "scope": 11742, + "src": "4883:221:72", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 11631, + "nodeType": "Block", + "src": "5404:158:72", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 11616, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "5430:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11618, + "indexExpression": { + "id": 11617, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11609, + "src": "5437:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5430:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11619, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "adminRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 11477, + "src": "5430:22:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 11620, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5454:3:72", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5454:10:72", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 11615, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11531, + "src": "5422:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 11622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5422:43:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65", + "id": 11623, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5467:50:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3", + "typeString": "literal_string \"AccessControl: sender must be an admin to revoke\"" + }, + "value": "AccessControl: sender must be an admin to revoke" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3", + "typeString": "literal_string \"AccessControl: sender must be an admin to revoke\"" + } + ], + "id": 11614, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5414:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5414:104:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11625, + "nodeType": "ExpressionStatement", + "src": "5414:104:72" + }, + { + "expression": { + "arguments": [ + { + "id": 11627, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11609, + "src": "5541:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11628, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11611, + "src": "5547:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11626, + "name": "_revokeRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11741, + "src": "5529:11:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 11629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5529:26:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11630, + "nodeType": "ExpressionStatement", + "src": "5529:26:72" + } + ] + }, + "documentation": { + "id": 11607, + "nodeType": "StructuredDocumentation", + "src": "5110:223:72", + "text": " @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role." + }, + "functionSelector": "d547741f", + "id": 11632, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "revokeRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11612, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11609, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11632, + "src": "5358:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11608, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5358:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11611, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11632, + "src": "5372:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11610, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5372:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5357:31:72" + }, + "returnParameters": { + "id": 11613, + "nodeType": "ParameterList", + "parameters": [], + "src": "5404:0:72" + }, + "scope": 11742, + "src": "5338:224:72", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 11653, + "nodeType": "Block", + "src": "6121:135:72", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 11644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11641, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11637, + "src": "6139:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11642, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6150:3:72", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "6150:10:72", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "6139:21:72", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66", + "id": 11645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6162:49:72", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b", + "typeString": "literal_string \"AccessControl: can only renounce roles for self\"" + }, + "value": "AccessControl: can only renounce roles for self" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b", + "typeString": "literal_string \"AccessControl: can only renounce roles for self\"" + } + ], + "id": 11640, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "6131:7:72", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6131:81:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11647, + "nodeType": "ExpressionStatement", + "src": "6131:81:72" + }, + { + "expression": { + "arguments": [ + { + "id": 11649, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11635, + "src": "6235:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11650, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11637, + "src": "6241:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11648, + "name": "_revokeRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11741, + "src": "6223:11:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 11651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6223:26:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11652, + "nodeType": "ExpressionStatement", + "src": "6223:26:72" + } + ] + }, + "documentation": { + "id": 11633, + "nodeType": "StructuredDocumentation", + "src": "5568:480:72", + "text": " @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `account`." + }, + "functionSelector": "36568abe", + "id": 11654, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "renounceRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11638, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11635, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11654, + "src": "6075:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11634, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6075:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11637, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11654, + "src": "6089:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11636, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6089:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6074:31:72" + }, + "returnParameters": { + "id": 11639, + "nodeType": "ParameterList", + "parameters": [], + "src": "6121:0:72" + }, + "scope": 11742, + "src": "6053:203:72", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 11667, + "nodeType": "Block", + "src": "6889:42:72", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11663, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11657, + "src": "6910:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11664, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11659, + "src": "6916:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11662, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11717, + "src": "6899:10:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 11665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6899:25:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11666, + "nodeType": "ExpressionStatement", + "src": "6899:25:72" + } + ] + }, + "documentation": { + "id": 11655, + "nodeType": "StructuredDocumentation", + "src": "6262:554:72", + "text": " @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event. Note that unlike {grantRole}, this function doesn't perform any\n checks on the calling account.\n [WARNING]\n ====\n This function should only be called from the constructor when setting\n up the initial roles for the system.\n Using this function in any other way is effectively circumventing the admin\n system imposed by {AccessControl}.\n ====" + }, + "id": 11668, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setupRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11660, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11657, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11668, + "src": "6841:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11656, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6841:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11659, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11668, + "src": "6855:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6855:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6840:31:72" + }, + "returnParameters": { + "id": 11661, + "nodeType": "ParameterList", + "parameters": [], + "src": "6889:0:72" + }, + "scope": 11742, + "src": "6821:110:72", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 11692, + "nodeType": "Block", + "src": "7129:123:72", + "statements": [ + { + "eventCall": { + "arguments": [ + { + "id": 11677, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11671, + "src": "7161:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "baseExpression": { + "id": 11678, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "7167:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11680, + "indexExpression": { + "id": 11679, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11671, + "src": "7174:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7167:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11681, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "adminRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 11477, + "src": "7167:22:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11682, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11673, + "src": "7191:9:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 11676, + "name": "RoleAdminChanged", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11494, + "src": "7144:16:72", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$", + "typeString": "function (bytes32,bytes32,bytes32)" + } + }, + "id": 11683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7144:57:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11684, + "nodeType": "EmitStatement", + "src": "7139:62:72" + }, + { + "expression": { + "id": 11690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 11685, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "7211:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11687, + "indexExpression": { + "id": 11686, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11671, + "src": "7218:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7211:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11688, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "adminRole", + "nodeType": "MemberAccess", + "referencedDeclaration": 11477, + "src": "7211:22:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11689, + "name": "adminRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11673, + "src": "7236:9:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "7211:34:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 11691, + "nodeType": "ExpressionStatement", + "src": "7211:34:72" + } + ] + }, + "documentation": { + "id": 11669, + "nodeType": "StructuredDocumentation", + "src": "6937:114:72", + "text": " @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event." + }, + "id": 11693, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setRoleAdmin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11674, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11671, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11693, + "src": "7079:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11670, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7079:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11673, + "mutability": "mutable", + "name": "adminRole", + "nodeType": "VariableDeclaration", + "scope": 11693, + "src": "7093:17:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11672, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7093:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7078:33:72" + }, + "returnParameters": { + "id": 11675, + "nodeType": "ParameterList", + "parameters": [], + "src": "7129:0:72" + }, + "scope": 11742, + "src": "7056:196:72", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 11716, + "nodeType": "Block", + "src": "7317:123:72", + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 11705, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11697, + "src": "7356:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "expression": { + "baseExpression": { + "id": 11700, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "7331:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11702, + "indexExpression": { + "id": 11701, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11695, + "src": "7338:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7331:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11703, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "members", + "nodeType": "MemberAccess", + "referencedDeclaration": 11475, + "src": "7331:20:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 11704, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3965, + "src": "7331:24:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)" + } + }, + "id": 11706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7331:33:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11715, + "nodeType": "IfStatement", + "src": "7327:107:72", + "trueBody": { + "id": 11714, + "nodeType": "Block", + "src": "7366:68:72", + "statements": [ + { + "eventCall": { + "arguments": [ + { + "id": 11708, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11695, + "src": "7397:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11709, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11697, + "src": "7403:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 11710, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7412:3:72", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "7412:10:72", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 11707, + "name": "RoleGranted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11503, + "src": "7385:11:72", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$", + "typeString": "function (bytes32,address,address)" + } + }, + "id": 11712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7385:38:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11713, + "nodeType": "EmitStatement", + "src": "7380:43:72" + } + ] + } + } + ] + }, + "id": 11717, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_grantRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11698, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11695, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11717, + "src": "7278:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11694, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7278:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11697, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11717, + "src": "7292:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7292:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7277:31:72" + }, + "returnParameters": { + "id": 11699, + "nodeType": "ParameterList", + "parameters": [], + "src": "7317:0:72" + }, + "scope": 11742, + "src": "7258:182:72", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 11740, + "nodeType": "Block", + "src": "7506:126:72", + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 11729, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11721, + "src": "7548:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "expression": { + "baseExpression": { + "id": 11724, + "name": "_roles", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11482, + "src": "7520:6:72", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$11478_storage_$", + "typeString": "mapping(bytes32 => struct TestAccessControl.RoleData storage ref)" + } + }, + "id": 11726, + "indexExpression": { + "id": 11725, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11719, + "src": "7527:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7520:12:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RoleData_$11478_storage", + "typeString": "struct TestAccessControl.RoleData storage ref" + } + }, + "id": 11727, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "members", + "nodeType": "MemberAccess", + "referencedDeclaration": 11475, + "src": "7520:20:72", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddressSet_$3924_storage", + "typeString": "struct EnumerableSet.AddressSet storage ref" + } + }, + "id": 11728, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "remove", + "nodeType": "MemberAccess", + "referencedDeclaration": 4050, + "src": "7520:27:72", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$3924_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$3924_storage_ptr_$", + "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)" + } + }, + "id": 11730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7520:36:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11739, + "nodeType": "IfStatement", + "src": "7516:110:72", + "trueBody": { + "id": 11738, + "nodeType": "Block", + "src": "7558:68:72", + "statements": [ + { + "eventCall": { + "arguments": [ + { + "id": 11732, + "name": "role", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11719, + "src": "7589:4:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11733, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11721, + "src": "7595:7:72", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 11734, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7604:3:72", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "7604:10:72", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 11731, + "name": "RoleRevoked", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11512, + "src": "7577:11:72", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$", + "typeString": "function (bytes32,address,address)" + } + }, + "id": 11736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7577:38:72", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11737, + "nodeType": "EmitStatement", + "src": "7572:43:72" + } + ] + } + } + ] + }, + "id": 11741, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_revokeRole", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11722, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11719, + "mutability": "mutable", + "name": "role", + "nodeType": "VariableDeclaration", + "scope": 11741, + "src": "7467:12:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11718, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7467:7:72", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11721, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 11741, + "src": "7481:15:72", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11720, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7481:7:72", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7466:31:72" + }, + "returnParameters": { + "id": 11723, + "nodeType": "ParameterList", + "parameters": [], + "src": "7506:0:72" + }, + "scope": 11742, + "src": "7446:186:72", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 11743, + "src": "1613:6021:72" + } + ], + "src": "33:7602:72" + }, + "id": 72 + }, + "contracts/test/TestBalancerToken.sol": { + "ast": { + "absolutePath": "contracts/test/TestBalancerToken.sol", + "exportedSymbols": { + "TestBalancerToken": [ + 11846 + ] + }, + "id": 11847, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11744, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:73" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "id": 11745, + "nodeType": "ImportDirective", + "scope": 11847, + "sourceUnit": 3703, + "src": "713:75:73", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Burnable.sol", + "id": 11746, + "nodeType": "ImportDirective", + "scope": 11847, + "sourceUnit": 3760, + "src": "789:83:73", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol", + "id": 11747, + "nodeType": "ImportDirective", + "scope": 11847, + "sourceUnit": 3913, + "src": "873:81:73", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/test/TestAccessControl.sol", + "file": "./TestAccessControl.sol", + "id": 11748, + "nodeType": "ImportDirective", + "scope": 11847, + "sourceUnit": 11743, + "src": "956:33:73", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 11749, + "name": "TestAccessControl", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 11742, + "src": "1021:17:73", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TestAccessControl_$11742", + "typeString": "contract TestAccessControl" + } + }, + "id": 11750, + "nodeType": "InheritanceSpecifier", + "src": "1021:17:73" + }, + { + "baseName": { + "id": 11751, + "name": "ERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3702, + "src": "1040:5:73", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$3702", + "typeString": "contract ERC20" + } + }, + "id": 11752, + "nodeType": "InheritanceSpecifier", + "src": "1040:5:73" + }, + { + "baseName": { + "id": 11753, + "name": "ERC20Burnable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3759, + "src": "1047:13:73", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20Burnable_$3759", + "typeString": "contract ERC20Burnable" + } + }, + "id": 11754, + "nodeType": "InheritanceSpecifier", + "src": "1047:13:73" + }, + { + "baseName": { + "id": 11755, + "name": "ERC20Permit", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3912, + "src": "1062:11:73", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20Permit_$3912", + "typeString": "contract ERC20Permit" + } + }, + "id": 11756, + "nodeType": "InheritanceSpecifier", + "src": "1062:11:73" + } + ], + "contractDependencies": [ + 1650, + 1686, + 3224, + 3702, + 3759, + 3912, + 11742 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 11846, + "linearizedBaseContracts": [ + 11846, + 3912, + 3224, + 1686, + 3759, + 3702, + 1650, + 11742 + ], + "name": "TestBalancerToken", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "functionSelector": "d5391393", + "id": 11761, + "mutability": "constant", + "name": "MINTER_ROLE", + "nodeType": "VariableDeclaration", + "scope": 11846, + "src": "1080:62:73", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11757, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1080:7:73", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "4d494e5445525f524f4c45", + "id": 11759, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1128:13:73", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6", + "typeString": "literal_string \"MINTER_ROLE\"" + }, + "value": "MINTER_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6", + "typeString": "literal_string \"MINTER_ROLE\"" + } + ], + "id": 11758, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1118:9:73", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 11760, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1118:24:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "constant": true, + "functionSelector": "7028e2cd", + "id": 11766, + "mutability": "constant", + "name": "SNAPSHOT_ROLE", + "nodeType": "VariableDeclaration", + "scope": 11846, + "src": "1148:66:73", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11762, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1148:7:73", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "534e415053484f545f524f4c45", + "id": 11764, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1198:15:73", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f", + "typeString": "literal_string \"SNAPSHOT_ROLE\"" + }, + "value": "SNAPSHOT_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f", + "typeString": "literal_string \"SNAPSHOT_ROLE\"" + } + ], + "id": 11763, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1188:9:73", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 11765, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1188:26:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "id": 11770, + "name": "Snapshot", + "nodeType": "EventDefinition", + "parameters": { + "id": 11769, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11768, + "indexed": false, + "mutability": "mutable", + "name": "id", + "nodeType": "VariableDeclaration", + "scope": 11770, + "src": "1236:10:73", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11767, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1236:7:73", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1235:12:73" + }, + "src": "1221:27:73" + }, + { + "body": { + "id": 11805, + "nodeType": "Block", + "src": "1391:164:73", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "3138", + "id": 11787, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1416:2:73", + "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": 11786, + "name": "_setupDecimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3690, + "src": "1401:14:73", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint8_$returns$__$", + "typeString": "function (uint8)" + } + }, + "id": 11788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1401:18:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11789, + "nodeType": "ExpressionStatement", + "src": "1401:18:73" + }, + { + "expression": { + "arguments": [ + { + "id": 11791, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11485, + "src": "1440:18:73", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11792, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11772, + "src": "1460:5:73", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11790, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11668, + "src": "1429:10:73", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 11793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1429:37:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11794, + "nodeType": "ExpressionStatement", + "src": "1429:37:73" + }, + { + "expression": { + "arguments": [ + { + "id": 11796, + "name": "MINTER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11761, + "src": "1487:11:73", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11797, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11772, + "src": "1500:5:73", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11795, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11668, + "src": "1476:10:73", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 11798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1476:30:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11799, + "nodeType": "ExpressionStatement", + "src": "1476:30:73" + }, + { + "expression": { + "arguments": [ + { + "id": 11801, + "name": "SNAPSHOT_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11766, + "src": "1527:13:73", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 11802, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11772, + "src": "1542:5:73", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11800, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11668, + "src": "1516:10:73", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 11803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1516:32:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11804, + "nodeType": "ExpressionStatement", + "src": "1516:32:73" + } + ] + }, + "id": 11806, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 11779, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11774, + "src": "1359:4:73", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 11780, + "name": "symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11776, + "src": "1365:6:73", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "id": 11781, + "modifierName": { + "id": 11778, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3702, + "src": "1353:5:73", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$3702_$", + "typeString": "type(contract ERC20)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1353:19:73" + }, + { + "arguments": [ + { + "id": 11783, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11774, + "src": "1385:4:73", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "id": 11784, + "modifierName": { + "id": 11782, + "name": "ERC20Permit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3912, + "src": "1373:11:73", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20Permit_$3912_$", + "typeString": "type(contract ERC20Permit)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1373:17:73" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11777, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11772, + "mutability": "mutable", + "name": "admin", + "nodeType": "VariableDeclaration", + "scope": 11806, + "src": "1275:13:73", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11771, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1275:7:73", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11774, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 11806, + "src": "1298:18:73", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11773, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1298:6:73", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11776, + "mutability": "mutable", + "name": "symbol", + "nodeType": "VariableDeclaration", + "scope": 11806, + "src": "1326:20:73", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11775, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1326:6:73", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1265:87:73" + }, + "returnParameters": { + "id": 11785, + "nodeType": "ParameterList", + "parameters": [], + "src": "1391:0:73" + }, + "scope": 11846, + "src": "1254:301:73", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 11827, + "nodeType": "Block", + "src": "1619:106:73", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 11815, + "name": "MINTER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11761, + "src": "1645:11:73", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 11816, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1658:3:73", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1658:10:73", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 11814, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11531, + "src": "1637:7:73", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 11818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1637:32:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e4f545f4d494e544552", + "id": 11819, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1671:12:73", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_4c0c5d721c8b7b55b3e9849de342348c28ccdebf6d5421ee0bcc928e5487b778", + "typeString": "literal_string \"NOT_MINTER\"" + }, + "value": "NOT_MINTER" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_4c0c5d721c8b7b55b3e9849de342348c28ccdebf6d5421ee0bcc928e5487b778", + "typeString": "literal_string \"NOT_MINTER\"" + } + ], + "id": 11813, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1629:7:73", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1629:55:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11821, + "nodeType": "ExpressionStatement", + "src": "1629:55:73" + }, + { + "expression": { + "arguments": [ + { + "id": 11823, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11808, + "src": "1700:9:73", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 11824, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11810, + "src": "1711:6:73", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11822, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3596, + "src": "1694:5:73", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 11825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1694:24:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11826, + "nodeType": "ExpressionStatement", + "src": "1694:24:73" + } + ] + }, + "functionSelector": "40c10f19", + "id": 11828, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11811, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11808, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 11828, + "src": "1575:17:73", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11807, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1575:7:73", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11810, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 11828, + "src": "1594:14:73", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11809, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1594:7:73", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1574:35:73" + }, + "returnParameters": { + "id": 11812, + "nodeType": "ParameterList", + "parameters": [], + "src": "1619:0:73" + }, + "scope": 11846, + "src": "1561:164:73", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 11844, + "nodeType": "Block", + "src": "1760:105:73", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 11833, + "name": "SNAPSHOT_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11766, + "src": "1786:13:73", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 11834, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "1801:3:73", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 11835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1801:10:73", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 11832, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11531, + "src": "1778:7:73", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 11836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1778:34:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e4f545f534e415053484f54544552", + "id": 11837, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1814:17:73", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_57f285acbdfdaa12fc36b96a6f326bbbad439d962847f5b589c5ef66d041cd35", + "typeString": "literal_string \"NOT_SNAPSHOTTER\"" + }, + "value": "NOT_SNAPSHOTTER" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_57f285acbdfdaa12fc36b96a6f326bbbad439d962847f5b589c5ef66d041cd35", + "typeString": "literal_string \"NOT_SNAPSHOTTER\"" + } + ], + "id": 11831, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1770:7:73", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 11838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1770:62:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11839, + "nodeType": "ExpressionStatement", + "src": "1770:62:73" + }, + { + "eventCall": { + "arguments": [ + { + "hexValue": "30", + "id": 11841, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1856: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": 11840, + "name": "Snapshot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11770, + "src": "1847:8:73", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 11842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1847:11:73", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11843, + "nodeType": "EmitStatement", + "src": "1842:16:73" + } + ] + }, + "functionSelector": "9711715a", + "id": 11845, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "snapshot", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11829, + "nodeType": "ParameterList", + "parameters": [], + "src": "1748:2:73" + }, + "returnParameters": { + "id": 11830, + "nodeType": "ParameterList", + "parameters": [], + "src": "1760:0:73" + }, + "scope": 11846, + "src": "1731:134:73", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 11847, + "src": "991:876:73" + } + ], + "src": "688:1180:73" + }, + "id": 73 + } + } + } +} diff --git a/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/bytecode/FeeDistributorBALClaimer.json b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/bytecode/FeeDistributorBALClaimer.json new file mode 100644 index 0000000000..37d5ea511c --- /dev/null +++ b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/bytecode/FeeDistributorBALClaimer.json @@ -0,0 +1,3 @@ +{ + "creationCode": "0x61012060405234801561001157600080fd5b50604051610a13380380610a1383398101604081905261003091610170565b6000826001600160a01b0316631b88094d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561006b57600080fd5b505afa15801561007f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a3919061014d565b9050806001600160a01b031663c00396996040518163ffffffff1660e01b815260040160206040518083038186803b1580156100de57600080fd5b505afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610116919061014d565b6001600160601b0319606091821b811660805292811b831660a05293841b821660c05291831b811660e052911b16610100526101d4565b60006020828403121561015e578081fd5b8151610169816101bc565b9392505050565b600080600060608486031215610184578182fd5b835161018f816101bc565b60208501519093506101a0816101bc565b60408501519092506101b1816101bc565b809150509250925092565b6001600160a01b03811681146101d157600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6107c16102526000398060c1528061023e52806102d7525080610154528061047952508061010952806101b5528061027a52806103ec52508061012d528061052e52508060e552806101e2528061029b528061041b52506107c16000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063e758d36b11610050578063e758d36b146100a5578063eeed85fa146100ad578063f2803f03146100b757610072565b80630a08832d14610077578063c003969914610095578063c89131731461009d575b600080fd5b61007f6100bf565b60405161008c91906106aa565b60405180910390f35b61007f6100e3565b61007f610107565b61007f61012b565b6100b561014f565b005b61007f610477565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6101787f000000000000000000000000000000000000000000000000000000000000000061049b565b6040517f3902b9bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633902b9bc9061020a907f0000000000000000000000000000000000000000000000000000000000000000906004016106aa565b600060405180830381600087803b15801561022457600080fd5b505af1158015610238573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c10753297f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161031291906106aa565b60206040518083038186803b15801561032a57600080fd5b505afa15801561033e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103629190610692565b6040518363ffffffff1660e01b815260040161037f929190610739565b600060405180830381600087803b15801561039957600080fd5b505af11580156103ad573d6000803e3d6000fd5b50506040517f3902b9bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250633902b9bc9150610443907f0000000000000000000000000000000000000000000000000000000000000000906004016106aa565b600060405180830381600087803b15801561045d57600080fd5b505af1158015610471573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc2c4c5c10000000000000000000000000000000000000000000000000000000017905291517f4036176a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692634036176a92610561928692016106cb565b600060405180830381600087803b15801561057b57600080fd5b505af115801561058f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d591908101906105d9565b5050565b6000602082840312156105ea578081fd5b815167ffffffffffffffff80821115610601578283fd5b818401915084601f830112610614578283fd5b815181811115610622578384fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715610660578586fd5b604052818152838201602001871015610677578485fd5b61068882602083016020870161075f565b9695505050505050565b6000602082840312156106a3578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8416825260406020830152825180604084015261070681606085016020870161075f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60005b8381101561077a578181015183820152602001610762565b83811115610471575050600091015256fea264697066735822122022ef52312e84e78a4f93dc70d3394474e7cd7e5604cf6c42c006a69e71b7327264736f6c63430007010033" +} diff --git a/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/index.ts b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/index.ts new file mode 100644 index 0000000000..b77e335799 --- /dev/null +++ b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/index.ts @@ -0,0 +1,10 @@ +import Task from '../../src/task'; +import { TaskRunOptions } from '../../src/types'; +import { FeeDistributorBALClaimerDeployment } from './input'; + +export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { + const input = task.input() as FeeDistributorBALClaimerDeployment; + + const args = [input.FeeDistributor, input.Gauge, input.AuthorizerAdaptor]; + await task.deployAndVerify('FeeDistributorBALClaimer', args, from, force); +}; diff --git a/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/input.ts b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/input.ts new file mode 100644 index 0000000000..620f8d77f7 --- /dev/null +++ b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/input.ts @@ -0,0 +1,18 @@ +import Task, { TaskMode } from '../../src/task'; + +export type FeeDistributorBALClaimerDeployment = { + AuthorizerAdaptor: string; + FeeDistributor: string; + Gauge: string; +}; + +const AuthorizerAdaptor = new Task('20220325-authorizer-adaptor', TaskMode.READ_ONLY); +const FeeDistributor = new Task('20220420-fee-distributor', TaskMode.READ_ONLY); + +export default { + mainnet: { + AuthorizerAdaptor, + FeeDistributor, + Gauge: '0xE867AD0a48e8f815DC0cda2CDb275e0F163A480b', // veBAL SingleRecipientGauge + }, +}; diff --git a/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/readme.md b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/readme.md new file mode 100644 index 0000000000..e38005279f --- /dev/null +++ b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/readme.md @@ -0,0 +1,8 @@ +# 2022-05-17 - Fee Distributor BAL Claimer + +Deployment of the Fee Distributor BAL Claimer, which allows anyone to checkpoint the veBAL emissions gauge and direct those funds into the Fee Distributor. This gives assurances to veBAL holders that they will receive their BAL from this gauge without having to rely on a multisig to send these funds to the Fee Distributor. + +## Useful Files + +- [Ethereum mainnet addresses](./output/mainnet.json) +- [`FeeDistributorBALClaimer` ABI](./abi/FeeDistributorBALClaimer.json) diff --git a/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/test/test.fork.ts b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/test/test.fork.ts new file mode 100644 index 0000000000..d31456a2ea --- /dev/null +++ b/pkg/deployments/tasks/20220518-fee-distributor-BAL-claimer/test/test.fork.ts @@ -0,0 +1,103 @@ +import hre from 'hardhat'; +import { expect } from 'chai'; +import { BigNumber, Contract } from 'ethers'; + +import { fp } from '@balancer-labs/v2-helpers/src/numbers'; +import { currentWeekTimestamp } from '@balancer-labs/v2-helpers/src/time'; +import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; + +import Task, { TaskMode } from '../../../src/task'; +import { getForkedNetwork } from '../../../src/test'; +import { impersonate } from '../../../src/signers'; +import { actionId } from '@balancer-labs/v2-helpers/src/models/misc/actions'; + +describe('FeeDistributorBALClaimer', function () { + let authorizerAdaptor: Contract; + let balTokenHolder: Contract; + let feeDistributor: Contract; + let feeDistributorBALClaimer: Contract; + + let BAL: Contract; + + const task = new Task('20220518-fee-distributor-BAL-claimer', TaskMode.TEST, getForkedNetwork(hre)); + + const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + const BAL_ADDRESS = '0xba100000625a3754423978a60c9317c58a424e3D'; + + const EXPECTED_GAUGE_EMISSIONS = BigNumber.from('14375600035874545749391'); + + before('run task', async () => { + await task.run({ force: true }); + feeDistributorBALClaimer = await task.instanceAt( + 'FeeDistributorBALClaimer', + task.output({ network: 'test' }).FeeDistributorBALClaimer + ); + }); + + before('setup contracts', async () => { + const authorizerAdaptorTask = new Task('20220325-authorizer-adaptor', TaskMode.READ_ONLY, getForkedNetwork(hre)); + authorizerAdaptor = await authorizerAdaptorTask.deployedInstance('AuthorizerAdaptor'); + + const feeDistributorTask = new Task('20220420-fee-distributor', TaskMode.READ_ONLY, getForkedNetwork(hre)); + feeDistributor = await feeDistributorTask.deployedInstance('FeeDistributor'); + + const balTokenHolderFactoryTask = new Task( + '20220325-bal-token-holder-factory', + TaskMode.READ_ONLY, + getForkedNetwork(hre) + ); + balTokenHolder = await balTokenHolderFactoryTask.instanceAt( + 'BALTokenHolder', + await feeDistributorBALClaimer.getBALTokenHolder() + ); + + // We reuse this task as it contains an ABI similar to the one in real ERC20 tokens + const testBALTokenTask = new Task('20220325-test-balancer-token', TaskMode.READ_ONLY, getForkedNetwork(hre)); + BAL = await testBALTokenTask.instanceAt('TestBalancerToken', BAL_ADDRESS); + }); + + before('grant permissions to feeDistributorBALClaimer', async () => { + const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + + const vaultTask = new Task('20210418-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); + const vault = await vaultTask.deployedInstance('Vault'); + const authorizer = await vaultTask.instanceAt('Authorizer', await vault.getAuthorizer()); + + const singleRecipientGaugeFactoryTask = new Task( + '20220325-single-recipient-gauge-factory', + TaskMode.READ_ONLY, + getForkedNetwork(hre) + ); + const veBALGauge = await singleRecipientGaugeFactoryTask.instanceAt( + 'SingleRecipientGauge', + feeDistributorBALClaimer.getGauge() + ); + + const checkpointRole = await actionId(authorizerAdaptor, 'checkpoint', veBALGauge.interface); + const withdrawFundsRole = await actionId(balTokenHolder, 'withdrawFunds'); + await authorizer + .connect(govMultisig) + .grantRoles([checkpointRole, withdrawFundsRole], feeDistributorBALClaimer.address); + }); + + it('sends BAL to the FeeDistributor', async () => { + const currentWeek = currentWeekTimestamp(); + + const balToBeDistributedBefore = await feeDistributor.getTokensDistributedInWeek(BAL.address, currentWeek); + const tx = await feeDistributorBALClaimer.distributeBAL(); + const balToBeDistributedAfter = await feeDistributor.getTokensDistributedInWeek(BAL.address, currentWeek); + + expect(balToBeDistributedAfter).to.be.eq(balToBeDistributedBefore.add(EXPECTED_GAUGE_EMISSIONS)); + + expectEvent.inIndirectReceipt( + await tx.wait(), + feeDistributor.interface, + 'TokenCheckpointed', + { + token: BAL.address, + amount: EXPECTED_GAUGE_EMISSIONS, + }, + feeDistributor.address + ); + }); +}); diff --git a/pkg/interfaces/contracts/standalone-utils/IBALTokenHolder.sol b/pkg/interfaces/contracts/standalone-utils/IBALTokenHolder.sol index a73613c8ec..9dc061f2ce 100644 --- a/pkg/interfaces/contracts/standalone-utils/IBALTokenHolder.sol +++ b/pkg/interfaces/contracts/standalone-utils/IBALTokenHolder.sol @@ -16,8 +16,11 @@ pragma solidity >=0.7.0 <0.9.0; import "../solidity-utils/helpers/IAuthentication.sol"; import "../solidity-utils/openzeppelin/IERC20.sol"; +import "../liquidity-mining/IBalancerToken.sol"; interface IBALTokenHolder is IAuthentication { + function getBalancerToken() external view returns (IBalancerToken); + function getName() external view returns (string memory); function withdrawFunds(address recipient, uint256 amount) external; diff --git a/pkg/liquidity-mining/contracts/fee-distribution/FeeDistributorBALClaimer.sol b/pkg/liquidity-mining/contracts/fee-distribution/FeeDistributorBALClaimer.sol new file mode 100644 index 0000000000..b0de0b76fc --- /dev/null +++ b/pkg/liquidity-mining/contracts/fee-distribution/FeeDistributorBALClaimer.sol @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +import "@balancer-labs/v2-interfaces/contracts/liquidity-mining/ISingleRecipientGauge.sol"; +import "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol"; +import "@balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol"; + +/** + * @title FeeDistributorBALClaimer + * @notice Atomically mints any outstanding BAL from a SingleRecipientGauge and transfers it to the FeeDistributor + * in order for it to be distributed among veBAL holders. + */ +contract FeeDistributorBALClaimer { + IERC20 private immutable _balToken; + IAuthorizerAdaptor private immutable _authorizerAdaptor; + IFeeDistributor private immutable _feeDistributor; + ISingleRecipientGauge private immutable _gauge; + IBALTokenHolder private immutable _balTokenHolder; + + constructor( + IFeeDistributor feeDistributor, + ISingleRecipientGauge gauge, + IAuthorizerAdaptor authorizerAdaptor + ) { + IBALTokenHolder balTokenHolder = IBALTokenHolder(gauge.getRecipient()); + + _balToken = balTokenHolder.getBalancerToken(); + _authorizerAdaptor = authorizerAdaptor; + _feeDistributor = feeDistributor; + _gauge = gauge; + _balTokenHolder = balTokenHolder; + } + + /** + * @notice Returns the address of the Balancer token contract. + */ + function getBalancerToken() external view returns (IERC20) { + return _balToken; + } + + /** + * @notice Returns the address of the AuthorizerAdaptor contract. + */ + function getAuthorizerAdaptor() external view returns (IAuthorizerAdaptor) { + return _authorizerAdaptor; + } + + /** + * @notice Returns the address of the FeeDistributor contract. + */ + function getFeeDistributor() external view returns (IFeeDistributor) { + return _feeDistributor; + } + + /** + * @notice Returns the address of the associated SingleRecipientGauge contract. + */ + function getGauge() external view returns (ISingleRecipientGauge) { + return _gauge; + } + + /** + * @notice Returns the address of the associated BALTokenHolder contract. + */ + function getBALTokenHolder() external view returns (IBALTokenHolder) { + return _balTokenHolder; + } + + /** + * @notice Mint any outstanding BAL emissions and send them to the FeeDistributor + * @dev In order to call this function the `FeeDistributorBALClaimer` must be authorized to: + * - Withdraw BAL from the linked BALTokenHolder + * - Checkpoint the associated SingleRecipientGauge in order to mint BAL. + */ + function distributeBAL() external { + _checkpointGauge(_gauge); + + // We checkpoint before and after depositing tokens to ensure that the BAL is assigned to the correct week. + _feeDistributor.checkpointToken(_balToken); + _balTokenHolder.withdrawFunds(address(_feeDistributor), _balToken.balanceOf(address(_balTokenHolder))); + _feeDistributor.checkpointToken(_balToken); + } + + function _checkpointGauge(IStakelessGauge gauge) private { + _authorizerAdaptor.performAction(address(gauge), abi.encodeWithSelector(IStakelessGauge.checkpoint.selector)); + } +} diff --git a/pkg/pool-linear/contracts/test/MockUnbuttonERC20.sol b/pkg/pool-linear/contracts/test/MockUnbuttonERC20.sol index c99449d10e..bb2359951d 100644 --- a/pkg/pool-linear/contracts/test/MockUnbuttonERC20.sol +++ b/pkg/pool-linear/contracts/test/MockUnbuttonERC20.sol @@ -36,11 +36,7 @@ contract MockUnbuttonERC20 is ERC20, IButtonWrapper { function initialize(uint256 initialRate) public { uint256 mintAmount = INITIAL_DEPOSIT * initialRate; - IERC20(_underlying).safeTransferFrom( - msg.sender, - address(this), - INITIAL_DEPOSIT - ); + IERC20(_underlying).safeTransferFrom(msg.sender, address(this), INITIAL_DEPOSIT); _mint(address(this), mintAmount); } diff --git a/pkg/standalone-utils/contracts/BALTokenHolder.sol b/pkg/standalone-utils/contracts/BALTokenHolder.sol index 6f4e540c1b..c369820b09 100644 --- a/pkg/standalone-utils/contracts/BALTokenHolder.sol +++ b/pkg/standalone-utils/contracts/BALTokenHolder.sol @@ -48,7 +48,7 @@ contract BALTokenHolder is IBALTokenHolder, SingletonAuthentication { _name = name; } - function getBalancerToken() external view returns (IBalancerToken) { + function getBalancerToken() external view override returns (IBalancerToken) { return _balancerToken; }